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>
    /// 使用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);
            }
    }

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章