• 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);
            }
        }
  • 相关阅读:
    2021-07-12 部分集训题目题解
    2021-07-09/11 部分集训题目题解
    k8s删除Terminating状态的命名空间
    yum命令安装jenkins
    Jenkins构建docker镜像
    jenkins获取当前构建任务的构建人
    Kubernetes kubeconfig配置文件
    K8S中使用gfs当存储
    人类视觉系统对颜色和亮度的感知
    荧光的应用之全内反射荧光显微镜(TIRFM)
  • 原文地址:https://www.cnblogs.com/chenxizhaolu/p/12442528.html
Copyright © 2020-2023  润新知