2024 ASP.NET Core使用Autofac实现AOP拦截指南

本文主要是详解一下在ASP.NET Core使用Autofac实现AOP拦截指南,这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行google,不会打开google的,请自备上网工具。

本文主要是详解一下在ASP.NET Core使用Autofac实现AOP拦截指南,这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行google,不会打开google的,请自备上网工具

Autofac实现AOP拦截

  1. ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)
  2. ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入
  3. ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截)

上一篇我们讲了如何将默认的容器替换为Autofac,并使用属性注入,那么这一篇我们就来讲讲如何利用Autofac实现我们的AOP(面向切面编程) 。

引用正确的库来实现AOP

既然是跨平台,那么在asp.net core因为采用了.net core来作为基础库(当然,其实你可以换成.NET4.6.).
新的.NET Core是基于.NET Standard的..所以我们在引用库的时候特别要注意相关的兼容问题.
在传统的ASP.NET中,使用过Autofac来进行AOP操作的,应该都知道这个库.
Autofac.Extras.DynamicProxy,那么我们来看看它的依赖项.如图:

ASP.NET Core使用Autofac实现AOP拦截指南

所以,当我们直接安装这个库的时候,Nuget会自动关联并安装最新的Castle.Core4.2.1版本..那么问题就出现了..在项目的依赖项中,会发现很多警告:

ASP.NET Core使用Autofac实现AOP拦截指南
ASP.NET Core使用Autofac实现AOP拦截指南
ASP.NET Core使用Autofac实现AOP拦截指南

采用Autofac来实现AOP

首先,我们创建一个拦截类,代码如下:

 public class AOPTest : IInterceptor
    {
        public void Intercept(IInvocation invocation)
        {
            System.Diagnostics.Debug.WriteLine("你正在调用方法 "{0}"  参数是 {1}... ",
               invocation.Method.Name,              
               string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray()));
            //在被拦截的方法执行完毕后 继续执行           
            invocation.Proceed();

            System.Diagnostics.Debug.WriteLine("方法执行完毕,返回结果:{0}", invocation.ReturnValue);
        }
    }

这里,需要继承IInterceptor,然后实现它的Intercept方法..我们直接将拦截内容输出到调试窗(正式项目..请根据业务来操作拦截)..

找到我们要拦截的服务.并设置拦截特性(有多种方式.用特性的方式作为例子..个人也觉得特性AOP拦截比较方便),代码如下:

    [Intercept(typeof(AOPTest))]
    public class TestService: ITestService
    {
        public TestService()
        {
            MyProperty = Guid.NewGuid();
        }
        public Guid MyProperty { get; set; }
        public List<string> GetList(string a)
        {
            return new List<string>() { "LiLei", "ZhangSan", "LiSi" };
        }
    }

然后在容器中注入我们的AOP拦截类,并开启服务的拦截状态.代码如下:

   public class DefaultModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {

            builder.Register(c => new AOPTest());
            builder.RegisterType<TestService>().As<ITestService>().PropertiesAutowired().EnableInterfaceInterceptors();
        }
    }

这里注意,一定要在你注入的服务后面加上EnableInterfaceInterceptors来开启你的拦截.

然后在控制器中调用服务的方法,代码如下:

public class AutoDIController : Controller
    {

        public  ITestService _testService { get; set; }

        
        // GET: AutoDI
        public ActionResult Index()
        {
            ViewBag.date = _testService.GetList("Name");
            return View();
        }
}

然后我们运行代码,效果如下:

ASP.NET Core使用Autofac实现AOP拦截指南

这样,我们就完成了使用Autofac进行AOP拦截..
Autofac的AOP拦截器还有很多功能与用法.我这里就不一一举例了..

请参考官网:http://docs.autofac.org/en/latest/advanced/interceptors.html

本文转载自顾振印,原文链接:https://www.cnblogs.com/GuZhenYin/p/8309645.html,本文观点不代表江湖人士立场,转载请联系原作者。

(2)
江小编的头像江小编
上一篇 2018-01-18 13:13
下一篇 2018-01-18 18:31

热门推荐

One Response

  1. 的头像 新时代码农 2018-01-21

Leave a Reply

Sending

国外老牌便宜域名服务商Namecheap注册com域名大优惠,抢到就赚到,优惠码:NEWCOM698
$5.98/年
直达官网