通过Unity实现 AOP

7 篇文章 0 订阅

需要添加引用



添加命名空间

using Microsoft.Practices.Unity.InterceptionExtension;
using Microsoft.Practices.Unity;


下面方法

public class UnityDemo
    {

        public static void Show()
        {
            Users user = new Users()
            {
                Name = "Eleven",
                Password = "123123123123"
            };

            //IUnityContainer  是接口类型
            IUnityContainer container = new UnityContainer();//声明一个容器
            //IUnityContainer  是接口类型 UserProcessor是继承该接口的类
            container.RegisterType<IUserProcessor, UserProcessor>();//声明UnityContainer并注册IUserProcessor
            //IUnityContainer  是接口类型  其余不需要修改
            container.AddNewExtension<Interception>().Configure<Interception>()
                .SetInterceptorFor<IUserProcessor>(new InterfaceInterceptor());
            //IUnityContainer  是接口类型
            IUserProcessor userprocessor = container.Resolve<IUserProcessor>();
           
            Console.WriteLine("********************");
            userprocessor.RegUser(user);//调用

        }
    }



    public class UserHandler : ICallHandler
    {
        public int Order { get; set; }
        public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
        {
            /自定义代码部分 开始  这部分的代码 会在方法UserProcessor.RegUser 执行前执行
            Users user = input.Inputs[0] as Users;
            if (user.Password.Length < 10)
            {
                return input.CreateExceptionMethodReturn(new Exception("密码长度不能小于10位"));
            }
            Console.WriteLine("参数检测无误");

            /自定义代码部分 结束
            IMethodReturn methodReturn = getNext.Invoke().Invoke(input, getNext);
            /自定义代码部分 开始  这部分的代码 会在方法UserProcessor.RegUser 执行后执行
            /这里可以写方法
            /自定义代码部分 结束

            return methodReturn;
        }
    }

    public class UserHandlerAttribute : HandlerAttribute
    {
        public override ICallHandler CreateHandler(IUnityContainer container)
        {
            ICallHandler handler = new UserHandler() { Order = this.Order };
            return handler;

            //也可以直接下面这种写法
            //return new UserHandler() { Order = this.Order };
        }
    }

    public class Users
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Password { get; set; }
    }

    /// <summary>
    /// Order 是执行顺序 排序用的
    /// </summary>
    [UserHandlerAttribute(Order = 1)]
    public interface IUserProcessor
    {
        void RegUser(Users user);      
    }

    public class UserProcessor : IUserProcessor//MarshalByRefObject,
    {
        public void RegUser(Users user)
        {
            Console.WriteLine("用户已注册。");           
        }
    }

调用

UnityDemo.Show();


结果



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值