zoukankan      html  css  js  c++  java
  • 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);
            }
        }
  • 相关阅读:
    pandas Series和DataFrame数据类型
    numpy 统计函数与随机数
    numpy 索引
    numpy 数组复制与广播机制
    numpy 合并数组和切割数组
    numpy 添加删除去重及形状变换
    项目导入问题---讨厌的红色感叹号
    SpringMVC框架-----概述(2)
    SpringMVC框架-----概述(1)
    SpringBoot框架----概述(1)
  • 原文地址:https://www.cnblogs.com/chenxizhaolu/p/12442528.html
Copyright © 2011-2022 走看看