七种结构型设计模式之代理模式和适配器模式
代理模式和适配器模式!代码看起来都差不多!都是把业务逻辑包一层,然后在业务逻辑的进出口,实现一些通用的业务逻辑!比如说通用逻辑、日志、异常处理、安全、缓存、延迟、权限、事务、远程。
在.net core 中,代理所使用的和继承的类!是通过继承:
DispatchProxy 类来实现代理
下面是简单的动态AOP代理模式:
using System; namespace 测试AOP动态代理 { class Program { static void Main(string[] args) { IDbContext dbContext = new SqlServerProxy(); dbContext = TranProxy.Create<IDbContext>(dbContext); dbContext.SqlServer("id"); Console.WriteLine(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace 测试AOP动态代理 { public class MyRealProxy<T> : DispatchProxy { public T _Instance = default(T); public int b = 0; protected override object Invoke(MethodInfo? targetMethod, object?[] args) {
//可以在这个方法执行的前后!添加所需要执行的方法比如说通用逻辑、日志、异常处理、安全、缓存、延迟、权限、事务、远程。 var sss = targetMethod.Invoke(this._Instance, args); return sss; } } public static class TranProxy { public static T Create<T>(T t) { dynamic tProxy = DispatchProxy.Create<T,MyRealProxy<T>>()!; tProxy!._Instance = t; tProxy!.b = 99; return tProxy; } } }
如果你要非动态!这个就更简单了!直接new 就行了!包一层!然后在方法执行的前后!实现你需要的通用逻辑!