.Net Core3.x中的AOP框架-AspectCore
在之前,我有记录到.Net Core 3.x 使用Autofac替换默认Ioc容器,这里,我们就来学习一下.Net Core中如何实现AOP
由于之前用到了Autofac,所以这里就结合Autofac来使用AspectCore,首先需要引入AspectCore.Extensions.Autofac,我们新建一个名为MethodExecuteLoggerInterceptor的类:
1 | public class MethodExecuteLoggerInterceptor : AbstractInterceptor |
在我们之前的WebModule中加入一下代码进行注册
1 | builder.RegisterDynamicProxy(config=> { |
全局拦截带有Service后缀的类,
此时在启动起来,使用Swagger来调用我们的Web Api,会看到打印出MethodExecuteLoggerInterceptor里面的信息:
1 | Executed method Web.Services.ExampleService.GetName (Web) in 114ms |
在.net core中,也有Filter,那么这个Filter和Interceptors有什么区别呢?我们来对比一下。新建一个ExecuteLoggerFilter,在.net corehttps://github.com/dotnet/aspnetcore/tree/master/src/Mvc/Mvc.Abstractions/src/Filters中提供多种Filter接口,如:IActionFilter,IAuthorizationFilter,IExceptionFilter,IResultFilter,IResourceFilter等,这里我们让新建类继承IActionFilter,代码如下:
1 | public class ExecuteLoggerFilter : IActionFilter |
我在注册到Ioc中
1 | services.AddControllers(options=> { |
我们可以看到这样的顺序:
1 | Filter 开始执行 |
Filter会比我们的AOP粒度更大一些。一般粗粒度的可以用Filter来处理就可以了,如果想更细粒度的如到action的话,采用AOP更好一些。
.Net Core3.x中的AOP框架-AspectCore


