Autofac-AOP

257 阅读1分钟

1.Nuget引入:Castle.Core 2.扩展一个IInterceptor 实现方法

    using Castle.DynamicProxy;
   public class CusotmInterceptor : IInterceptor
{
    /// <summary>
    /// 切入者逻辑
    /// 
    /// 使用了Intercept 方法把 要调用的Call方法给包裹起来了
    /// </summary>
    /// <param name="invocation"></param>
    public void Intercept(IInvocation invocation)
    {
        {
            Console.WriteLine("Before");
        }
        invocation.Proceed(); //这句话的执行就是要去执行真实的方法
        {
            Console.WriteLine("After");
        }

    }
}

3.注册对象和具体之间的关系的时候,需要执行要支持AOP扩展EnableClassInterceptors

   //添加Autofac包  Autofac.Extensions.DependencyInjection包  using Autofac.Extensions.DependencyInjection;
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
//using Autofac;
builder.Host.ConfigureContainer<ContainerBuilder>(a =>
{
    a.RegisterType<Class1>().As<IClass>();
    a.RegisterType<Class2>().As<IClass1>().*EnableClassInterceptors()*;//using Autofac.Extras.DynamicProxy 支持AOP扩展
});

4.把要扩展aop的方法定义为 virtual 方法 5.把扩展的IInterceptor 也要注册到容器中去

    //添加Autofac包  Autofac.Extensions.DependencyInjection包  using Autofac.Extensions.DependencyInjection;
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
//using Autofac;
builder.Host.ConfigureContainer<ContainerBuilder>(a =>
{
    a.RegisterType<Class1>().As<IClass>();
    a.RegisterType<Class2>().As<IClass1>().EnableClassInterceptors();//using Autofac.Extras.DynamicProxy 支持AOP扩展
    *a.RegisterType<CusotmInterceptor>();*

});

一、通过EnableClassInterceptors 来支持的时候 1.需要把 Intercept标记到具体的而实现类上--扩展IInterceptor也要引用进来 2.特点:必须要是虚方法才会进入到 扩展IInterceptor 来---才能支持aop扩展

二、通过EnableInterfaceInterceptors来支持的时候 1.需要把 Intercept标记到抽象--接口--扩展IInterceptor也要引用到抽象这 2.特点:只要是实现了这接口,无论是否是虚方法,都可以进入到IInterceptor 中来,也就是都可以支持AOP扩展