zoukankan      html  css  js  c++  java
  • 5、动态代理AOP实现-DynamicProxy模式

    通过动态代理模式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>
      /// 使用CastleDynamicProxy 实现动态代理
      /// 方法必须是虚方法
      /// </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);
              }
      }
  • 相关阅读:
    记一次阿里云硬盘在线扩容
    大文件传输技巧-----split切割
    数据库迁移-------通过ibdata1文件和数据库文件迁移
    小技巧---------------vim 使用技巧 set paste 解决粘贴乱序问题
    webfrom 做项目的注意事项
    webform 复合控件
    wenfrom的简单控件和repeater控件
    分页功能 与 分类查询功能合并
    内置对象2
    简单的人员管理系统
  • 原文地址:https://www.cnblogs.com/menglin2010/p/10558988.html
Copyright © 2011-2022 走看看