5、动态代理AOP实现-DynamicProxy模式
通过动态代理模式Interceptor实现在RegUser()方法本身业务前后加上一些自己的功能,如:PreProceed和PostProceed,即不修改UserProcessor类又能增加新功能
- 定义1个用户接口,里面有个注册用户方法
public interface IUserProcessor { void RegUser(User user); }
- 实现用户这个接口
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}"); } }
- 继承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("方法执行后"); } }
-
调用
/// <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); } }
旧书不厌百回读,熟读深思子自知。