码迷,mamicode.com
首页 > Web开发 > 详细

netcore使用AutoFac实现AOP

时间:2020-03-22 23:47:59      阅读:152      评论:0      收藏:0      [点我收藏+]

标签: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"; } }
技术图片

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

技术图片
/// <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);
        }
    }
技术图片

 

netcore使用AutoFac实现AOP

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

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!