欢迎各位转载,转载文章必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
定义
先看看某度某科怎么定义的 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
总结
public class ServiceAOP: IInterceptor { public void Intercept(IInvocation invocation) { DoSomething(); Console.WriteLine("我要收集请求参数,发给我们算法模型同学 \"{0}\" 参数是 {1}... ", invocation.Method.Name, string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray())); //执行真实业务方法 invocation.Proceed(); } public void DoSomething() { Console.WriteLine("AOP,我先说话,你们service稍后再发言!"); } }
第一种
builder.RegisterType<ServiceAOP>().As<IInterceptor>().InstancePerDependency();
//第一种方式
builder.RegisterType<TestServiceTwo>().As<ITestServiceTwo>().InterceptedBy(typeof(IInterceptor)) .InstancePerDependency().EnableClassInterceptors();
第二种
builder.Register(c => new ServiceAOP())
var serviceAsm = Assembly.Load(new AssemblyName("Sharper.Core")); builder.RegisterAssemblyTypes(serviceAsm) .Where(t => typeof(ITagService).IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract) .AsImplementedInterfaces() .InstancePerLifetimeScope() .EnableInterfaceInterceptors(); //注入拦截器
注册程序集下所有继承ITagService的接口,并注入拦截中间件
[Intercept(typeof(ServiceAOP))] public class TestServiceOne : ITestServiceTwo { public async Task FirstMethod() { //doSomething 业务逻辑 await Task.Run(() => { Console.WriteLine($"业务方法:TestServiceTwo.FirstMethod()执行成功..."); }); } }
这样,在执行ITestServiceTwo 接口的业务方法之前,都会先执行aop中间件的方法操作
public class RequestCultureMiddleware { //定义私有只读的委托 RequestDelegate private readonly RequestDelegate _next; public RequestCultureMiddleware(RequestDelegate next) { _next = next; } //定义名为Invoke 或 InvokeAsync 的方法,参数为HttpContext public async Task InvokeAsync(HttpContext context) { Console.WriteLine($"api 请求进来了,action{context.Request.Path}"); // Call the next delegate/middleware in the pipeline await _next(context); } }
这个就是本文好说的内容,其实aop中间件的玩法有很多,不止于上面说的哪几种,好可以,实现缓存拦截,不同的业务方法 分别进行不同数据库初始化,同学们可以探索一下新玩法,个人感觉,这个对项目的完整性和效率帮助还是挺大的。
欢迎各位转载,转载文章必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。