Removed untyped contructor from ComponentRegistration and add a protected setter.
[castle.git] / InversionOfControl / Castle.MicroKernel / Registration / Interceptor / InterceptorDescriptor.cs
blob6de1489764ed724c7013d28de26a90a6d4ec2b42
1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
2 //
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
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
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
17 using System;
18 using Castle.Core;
20 public class InterceptorDescriptor<S> : ComponentDescriptor<S>
22 private readonly Where where;
23 private readonly int insertIndex;
24 private readonly InterceptorReference[] interceptors;
26 public enum Where
28 First,
29 Last,
30 Insert,
31 Default
34 public InterceptorDescriptor(InterceptorReference[] interceptors, Where where)
36 this.interceptors = interceptors;
37 this.where = where;
40 public InterceptorDescriptor(InterceptorReference[] interceptors, int insertIndex)
41 : this(interceptors, Where.Insert)
43 if (insertIndex < 0)
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)
61 switch (where)
63 case Where.First:
64 model.Interceptors.AddFirst(interceptor);
65 break;
67 case Where.Last:
68 model.Interceptors.AddLast(interceptor);
69 break;
71 case Where.Insert:
72 model.Interceptors.Insert(insertIndex, interceptor);
73 break;
75 default:
76 model.Interceptors.Add(interceptor);
77 break;
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);