netcore使用AutoFac实现AOP

2021-04-02 23:25

阅读:348

标签:action   image   tle   不能   on()   实现类   注入   ble   写日志   

原文:netcore使用AutoFac实现AOP

第一步,添加程序集引用

在Nuget中搜索autofac找到Autofac.Extras.DynamicProxy并安装。

技术图片

 

 

 第二步:添加拦截器

技术图片
/// 
    /// 拦截器(实现 Castle.DynamicProxy.IInterceptor)接口
    /// 
    public class CustomAutoFacAOPInterception : IInterceptor
    {
        public void Intercept(IInvocation invocation)
        {
            Console.WriteLine("执行之前可以写日志、参数检查……");
       //可以捕获异常 invocation.Proceed(); Console.WriteLine(
"执行之后可以写日志……"); } } /// /// person服务接口 /// public interface IPerson { string Speak(); } /// /// 接口的实现类 /// 注意,与Unity实现aop不同,autofac是作用于实现类而不是接口 /// [Intercept(typeof(CustomAutoFacAOPInterception))] public class Person : IPerson { public string Speak() { return "你好,我是一个Person"; } }
技术图片

第三步,在注册模块注册拦截器并启用AOP拦截

技术图片
/// 
    /// AutoFac注册模块
    /// 
    public class CustomAutoFacModule: Autofac.Module
    {
       /// 
       /// 重写父类的Load方法
       /// 
       /// 
        protected override void Load(ContainerBuilder builder)
        {
            //1、注册拦截器
            builder.Register(a => new CustomAutoFacAOPInterception());
            //2、设置该类型允许AOP拦截
            builder.RegisterType().As().EnableInterfaceInterceptors().SingleInstance();
            builder.RegisterType().As().SingleInstance();//感叹,这语法,真的是不能再爽了
            //后面可以注册好多类型……
            //后面可以注册好多类型……
            //后面可以注册好多类型……
            //后面可以注册好多类型……
        }
    }
技术图片

第四步,调用

技术图片
 public class InterceptDemoController : Controller
    {
        private IPerson _personService = null;
        /// 
        /// 构造注入
        /// 
        /// 
        public InterceptDemoController(IPerson person)
        {
            _personService = person;
        }
        public IActionResult Index()
        {
            string rel = _personService.Speak();
            return Content(rel);
        }
    }
技术图片

 

netcore使用AutoFac实现AOP

标签:action   image   tle   不能   on()   实现类   注入   ble   写日志   

原文地址:https://www.cnblogs.com/lonelyxmas/p/12549286.html


评论


亲,登录后才可以留言!