Unity提供了一种默认注入CallHandler的机制,只需要开发人员提供继承于HandlerAttribute抽象类,并实现CreateHandler函数,它返回一个实现ICallHandler的类型。你可以通过上下文传递的IUnityContainer创建对应的ICallHandler实现。看一个简单的示例:
1 public sealed class ConsoleOutHandlerAttribute : HandlerAttribute 2 { 3 public override ICallHandler CreateHandler(IUnityContainer container) 4 { 5 return container.Resolve(); 6 } 7 } 8 9 public sealed class ConsoleOutHandler : ICallHandler10 {11 #region ICallHandler Members12 13 public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)14 {15 Console.WriteLine(input.MethodBase.Name);16 17 return getNext()(input, getNext);18 }19 20 public Int32 Order { get; set; }21 22 #endregion23 }24 25 public class MyObject26 {27 [ConsoleOutHandler]28 public virtual void DoWork()29 {30 31 }32 }33 34 IUnityContainer unityContainer = new UnityContainer();35 36 unityContainer.LoadConfiguration();37 unityContainer.RegisterType ();38 unityContainer.RegisterType (39 new Interceptor (),40 new InterceptionBehavior ()41 );42 43 MyObject myObject = unityContainer.Resolve ();44 45 myObject.DoWork();