首页 > 其他 > 详细

5.动态代理AOP实现-DynamicProxy模式

时间:2019-03-19 16:14:16      阅读:160      评论:0      收藏:0      [点我收藏+]

通过动态代理模式Interceptor实现在RegUser()方法本身业务前后加上一些自己的功能,如:PreProceed和PostProceed,即不修改UserProcessor类又能增加新功能

  1. 定义1个用户接口,里面有个注册用户方法
    public interface IUserProcessor
    {
      void RegUser(User user);
    }
  2. 实现用户这个接口
    public class UserProcessor : IUserProcessor
    {
                /// <summary>
                /// 必须带上virtual 否则无效
                /// </summary>
                /// <param name="user"></param>
                public virtual void RegUser(User user)
                {
                    Console.WriteLine($"用户已注册。Name:{user.Name},PassWord:{user.Password}");
                }
    }
  3. 继承IInterceptor接口,实现IInterceptor接口里的Intercept方法
    public class MyInterceptor : IInterceptor
    {
                public void Intercept(IInvocation invocation)
                {
                    PreProceed(invocation);
                    invocation.Proceed();//就是调用原始业务方法
                    PostProceed(invocation);
                }
    
                public void PreProceed(IInvocation invocation)
                {
                    Console.WriteLine("方法执行前");
                }
    
                public void PostProceed(IInvocation invocation)
                {
                    Console.WriteLine("方法执行后");
                }
    }
  4. 调用

    /// <summary>
    /// 使用Castle\DynamicProxy 实现动态代理
    /// 方法必须是虚方法
    /// </summary>
    public class CastleProxyAOP
    {
            public static void Show()
            {
                User user = new User()
                {
                    Name = "Eleven",
                    Password = "123456"
                };
                ProxyGenerator generator = new ProxyGenerator();
                MyInterceptor interceptor = new MyInterceptor();
                UserProcessor userprocessor = generator.CreateClassProxy<UserProcessor>(interceptor);
                userprocessor.RegUser(user);
            }
    }

     

5.动态代理AOP实现-DynamicProxy模式

原文:https://www.cnblogs.com/menglin2010/p/10558988.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!