欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

.Net Core IOC依赖注入和Autofac 实现AOP(三)

程序员文章站 2024-01-29 17:52:04
...

之前利用了Autofac来实现IOC,当然Autofac也可以实现AOP的,之前在.Net Framework中就这么使用的,那在.Net Core中应该也可以的。

方法也很简单,Autofac就配置方法就不讲了,前面有讲到,就在前面配置好Autofac的基础上来讲下Aop的配置。需要增加新的库,

Autofac.Extras.DynamicProxy

使用nuget进行安装下,前面几项也是需要的,只不过之前将Autofac的时候已经安装好了,这次就增加最后项就行了。

.Net Core IOC依赖注入和Autofac 实现AOP(三)

配置方法如下,新增一个Aop类,AopTest继承IInterceptor,然后实现Intercept方法就行了,Invocation.Proceed()前就是写你的方法执行前需要执行的,后就是你方法执行后的

    public class AopTest : IInterceptor {
        public void Intercept(IInvocation invocation) {
            MethodInfo methodInfo = invocation.MethodInvocationTarget;
            if (methodInfo == null) methodInfo = invocation.Method;
            string methodName = invocation.InvocationTarget.ToString() + "." + invocation.Method.Name;
            Log4NetHelper.Info($"before start {methodName}", typeof(AopTest));
            invocation.Proceed();
            Log4NetHelper.Info($"finish start {methodName}", typeof(AopTest));
        }
    }

 然后增加下配置

在之前Autofac.config文件中增加

            //AOP
            builder.Register(c => new AopTest());
            builder.RegisterType<ServiceA>().As<IServiceA>().InstancePerLifetimeScope().EnableInterfaceInterceptors().InterceptedBy(typeof(AopTest));

这样调用ServiceA中方法时就会执行Aop中的动作了。配置中EnableInterfaceInterceptors不能少,当然配置中指定实现Aop的这句代码InterceptedBy(typeof(AopTest)),我们可以不使用,而是通过另外一种特性的方法来指定Aop,可以在ServiceA中增加特性    [Intercept(typeof(AopTest))]来实现,两者效果是一样的,看你用哪个方便了。

Aop可以实现如事务,缓存,权限验证的功能。