标签:action image tle 不能 on() 实现类 注入 ble 写日志
原文:netcore使用AutoFac实现AOP
在Nuget中搜索autofac找到Autofac.Extras.DynamicProxy并安装。
/// <summary> /// 拦截器(实现 Castle.DynamicProxy.IInterceptor)接口 /// </summary> public class CustomAutoFacAOPInterception : IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine("执行之前可以写日志、参数检查……");
//可以捕获异常 invocation.Proceed(); Console.WriteLine("执行之后可以写日志……"); } } /// <summary> /// person服务接口 /// </summary> public interface IPerson { string Speak(); } /// <summary> /// 接口的实现类 /// 注意,与Unity实现aop不同,autofac是作用于实现类而不是接口 /// </summary> [Intercept(typeof(CustomAutoFacAOPInterception))] public class Person : IPerson { public string Speak() { return "你好,我是一个Person"; } }
/// <summary> /// AutoFac注册模块 /// </summary> public class CustomAutoFacModule: Autofac.Module { /// <summary> /// 重写父类的Load方法 /// </summary> /// <param name="builder"></param> protected override void Load(ContainerBuilder builder) { //1、注册拦截器 builder.Register(a => new CustomAutoFacAOPInterception()); //2、设置该类型允许AOP拦截 builder.RegisterType<Person>().As<IPerson>().EnableInterfaceInterceptors().SingleInstance(); builder.RegisterType<UserProvider>().As<IUserService>().SingleInstance();//感叹,这语法,真的是不能再爽了 //后面可以注册好多类型…… //后面可以注册好多类型…… //后面可以注册好多类型…… //后面可以注册好多类型…… } }
public class InterceptDemoController : Controller { private IPerson _personService = null; /// <summary> /// 构造注入 /// </summary> /// <param name="person"></param> public InterceptDemoController(IPerson person) { _personService = person; } public IActionResult Index() { string rel = _personService.Speak(); return Content(rel); } }
标签:action image tle 不能 on() 实现类 注入 ble 写日志
原文地址:https://www.cnblogs.com/lonelyxmas/p/12549286.html