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);
            }
        }
  • 相关阅读:
    解决GIT可视化工具Sourcetree拉取失败问题
    记录常用Git命令
    vue开发移动端使用rem的适配方案
    使用HBuilderX实现打包vue项目成app
    使用vue+webpack从零搭建项目
    整理最近面试问道的问题
    模块化之seaJs学习和使用
    理解Object.defineProperty的作用
    vue生命周期
    使用gulp编译sass
  • 原文地址:https://www.cnblogs.com/chenxizhaolu/p/12442528.html
Copyright © 2011-2022 走看看