.net core 3.1 扩展 Autofac AOP

.net core 3.1 扩展 Autofac AOP

交流QQ群:555913397
有什么问题可以加群大家一起交流

1.添加Nuget程序包

1.1 Autofac.Extras.DynamicProxy

2.添加自定义AOP扩展类

    //集成Autofac拦截器接口
    public class AutofacAopExtension : IInterceptor
    {
        //实现拦截方法
        public void Intercept(IInvocation invocation)
        {
            //执行方法前做的操作
            Console.WriteLine("执行前");
            //执行目标方法
            invocation.Proceed();
            //执行方法后做的操作
            Console.WriteLine("执行后");
        }
    }

3.注册自定义AOP扩展

public class AutofacModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            //注册自定义AOP扩展
            builder.Register(x => new AutofacAopExtension());

            System.Reflection.Assembly serviceAssembly = System.Reflection.Assembly.Load("CoreMvc.Service");
            System.Reflection.Assembly InterfaceAssembly = System.Reflection.Assembly.Load("CoreMvc.Interface");
            builder.RegisterAssemblyTypes(serviceAssembly, InterfaceAssembly)
            .Where(x => x.Name.EndsWith("AppService", StringComparison.OrdinalIgnoreCase))
            //这里注意,有两种开启拦截的模式,算是一个小坑,上面的注册方式需要使用接口模式
            //1.这是类模式
            .EnableClassInterceptors()
            //2.这是接口模式
            .EnableInterfaceInterceptors()
            //下面这是默认注入AOP,就不需要使用特性
            .InterceptedBy(typeof(AutofacAopExtension))
            .AsImplementedInterfaces();
        }
    }

4.添加拦截器特性实现AOP

//添加拦截器特性    
[Intercept(typeof(AutofacAopExtension))]
    public class PeopleAppService : IPeopleAppService
    {
        public void Show()
        {
            Console.WriteLine("People");
        }
    }
}

5.测试AOP

public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly IPeopleAppService _people;
        private readonly ICompanyAppService _company;

        public HomeController(ILogger<HomeController> logger, IPeopleAppService people, ICompanyAppService company)
        {
            _logger = logger;
            _people = people;
            _company = company;
        }

        public IActionResult Index()
        {
            //调用此方法
            _people.Show();
            _company.Show();
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }

6.使用效果

执行前
People
执行后
执行前
Company
执行后

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值