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);
              }
      }
  • 相关阅读:
    redis-3.2.5 make 报错
    haproxy 实现多域名证书https
    centos7修改主机名
    ngx_image_thumb模块生成缩略图
    查看nginx在安装时开启了哪些模块
    C# install-package:"xx"已拥有为“xxx”定义的依赖项
    JetBrains 2017/2018全系列产品激活工具
    查看win10版本方法,及win10升级方法
    Windows 10正式版的历史版本
    open '/dev/hwlog_switch' fail -1, 13. Permission denied
  • 原文地址:https://www.cnblogs.com/menglin2010/p/10558988.html
Copyright © 2011-2022 走看看