.Net使用UNity实现AOP

0 篇文章 0 订阅

Unity实现AOP

记录一点在用Unity实现AOP时候遇到的坑。

版本问题

目前Unity最新的版本是5.11.1,同时Unity.Interception的最新版本也是5.11.1,于是我就安装了这两个最新版本,可是代码写好了却怎么也执行不到自定义的Attribute。不知道是不是最近版本的写法不一样了还是不兼容了,网上查了许多资料没找到相关的解释。如果有哪位大神知道解决方法欢迎留言指点,万分感谢。
新版本不支持,于是我只能回归到原始版本。经过几次尝试最后确定了可执行的版本:
Unity: v5.5.0
Unity.Interception: v5.2.1
在这里插入图片描述

代码实现

接下来通过一个简单手机类来演示一下AOP的实现。先定义一个简单的手机接口

    public interface IPhone
    {
        void Call();
    }

写一个安卓手机类实现手机接口

     public class AndroidPhone : IPhone
    {
        public void Call()
        {
            Console.WriteLine("Android Call ");
        }
    }

接下来是AOP功能实现,没有任何逻辑处理知识做个简单地演示。

    public class PhoneHandler : ICallHandler
    {
        public int Order { get; set; }

        public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
        {
            Console.WriteLine("PhoneHandler");
            return getNext()(input, getNext);
        }
    }
    public class PhoneHandlerAttribute : HandlerAttribute
    {
        public override ICallHandler CreateHandler(IUnityContainer container)
        {
            ICallHandler handler = new PhoneHandler() { Order = this.Order };
             return handler; 
        }
    }

接下来只要Iphone接口实现PhoneHandlerAttribute就行,Order是排序,如果有多个Attribute可是用来设置执行顺序。

 [LogHandler(Order = 1)]
    public interface IPhone
    {
        void Call();
    }

最后通过注入的方式实例化Phone方法并调用Call方法

  IUnityContainer container = new UnityContainer();

  container.RegisterType<IPhone, AdroidPhone>();

 //设置执行AOP
  container.AddNewExtension<Interception>()
 .Configure<Interception>()
 .SetInterceptorFor<IPhone>(new InterfaceInterceptor());


  var phone = container.Resolve<IPhone>();
  phone.Call();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值