.net core2.0 中使用aspectcore实现aop
一、新建一个web application项目
1.1、添加AspectCore.Extensions.DependencyInjection引用
二、实现AbstractInterceptorAttribute类
using AspectCore.DynamicProxy; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace WebApplication1 { public class MyaspectAttribute : AbstractInterceptorAttribute { public override Task Invoke(AspectContext context, AspectDelegate next) { try { //方法调用之前 Console.WriteLine("Before"); return context.Invoke(next); } catch (Exception) { //方法抛异常调用 Console.WriteLine("exception!"); throw; } finally { //方法完成之后调用 Console.WriteLine("After"); } } } }
三、修改startup
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using AspectCore.Configuration; using AspectCore.Extensions.DependencyInjection; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace WebApplication1 { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc(); //1.把ConfigureServices方法的返回值修改为IServiceProvider //2.使用core自带的ioc services.AddTransient<itest, test>(); //3.使用代理 services.AddDynamicProxy(config => { //使用通配符的特定全局拦截器 config.Interceptors.AddTyped<MyaspectAttribute>(Predicates.ForService("*est")); }); return services.BuildAspectCoreServiceProvider(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); } } }
四、结果