1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle
.MicroKernel
.Registration
.Interceptor
20 public class InterceptorDescriptor
<S
> : ComponentDescriptor
<S
>
22 private readonly Where where
;
23 private readonly int insertIndex
;
24 private readonly InterceptorReference
[] interceptors
;
34 public InterceptorDescriptor(InterceptorReference
[] interceptors
, Where where
)
36 this.interceptors
= interceptors
;
40 public InterceptorDescriptor(InterceptorReference
[] interceptors
, int insertIndex
)
41 : this(interceptors
, Where
.Insert
)
45 throw new ArgumentOutOfRangeException("insertIndex", "insertIndex must be >= 0");
48 this.insertIndex
= insertIndex
;
51 public InterceptorDescriptor(InterceptorReference
[] interceptors
)
53 where
= Where
.Default
;
54 this.interceptors
= interceptors
;
57 protected internal override void ApplyToModel(IKernel kernel
, ComponentModel model
)
59 foreach(InterceptorReference interceptor
in interceptors
)
64 model
.Interceptors
.AddFirst(interceptor
);
68 model
.Interceptors
.AddLast(interceptor
);
72 model
.Interceptors
.Insert(insertIndex
, interceptor
);
76 model
.Interceptors
.Add(interceptor
);
80 AddDependencyModel(interceptor
, model
);
84 private static void AddDependencyModel(InterceptorReference interceptor
, ComponentModel model
)
86 DependencyModel dependency
= new DependencyModel(
87 DependencyType
.Service
, interceptor
.ComponentKey
,
88 interceptor
.ServiceType
, false);
89 model
.Dependencies
.Add(dependency
);