1、NuGet引入包:
AspectCore.Extensions.DependencyInjection
AspectCore.Core
2、Program.cs 修改
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
//用AspectCore替换默认的IOC容器
.UseServiceProviderFactory(new DynamicProxyServiceProviderFactory());
3、Setup.cs 修改
public void ConfigureServices(IServiceCollection services) {
services.AddTransient<ITestService, TestService>();
services.ConfigureDynamicProxy();
services.AddControllers()
//把控制器当成服务
.AddControllersAsServices();
}
4、拦截器
public class OperatorLogAttribute: AbstractInterceptorAttribute {
public async override Task Invoke(AspectContext context, AspectDelegate next)
{
try
{
Console.WriteLine("Before service call");
await next(context);
}
catch (Exception)
{
Console.WriteLine("TestService threw an exception!");
throw;
}
finally
{
Console.WriteLine("After service call");
}
}
}
5、使用
public interface ITestService {
[OperatorLog]
string Call(string call);
}
public class TestService : ITestService
{
public string Call(string call)
{
return call;
}
}