Unity Creating Interception Handler Attributes

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<ConsoleOutHandler>();
 6   }
 7 }
 8 
 9 public sealed class ConsoleOutHandler : ICallHandler
10 {
11   #region ICallHandler Members
12 
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   #endregion
23 }
24 
25 public class MyObject
26 {
27   [ConsoleOutHandler]
28   public virtual void DoWork()
29   {
30 
31   }
32 }
33 
34 IUnityContainer unityContainer = new UnityContainer();
35 
36 unityContainer.LoadConfiguration();
37 unityContainer.RegisterType<ICallHandler, ConsoleOutHandler>();
38 unityContainer.RegisterType<MyObject>(
39   new Interceptor<VirtualMethodInterceptor>(),
40   new InterceptionBehavior<PolicyInjectionBehavior>()
41 );
42 
43 MyObject myObject = unityContainer.Resolve<MyObject>();
44 
45 myObject.DoWork();
复制代码
posted @   junchu25  阅读(297)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示