.Net6 Web Core API --- Autofac -- AOP

AOP拦截器 可开启 类拦截器 和 接口拦截器
类拦截器 — 只有方法标注 virtual 标识才会启动
接口拦截器 — 所有实现接口的方法都会启动

一、AOP 封装

// 在 Program.cs 配置 builder.AddAOPExt();
 
//自定义 AOP 扩展
public static class CustomAOPExt
{
    public static void AddAOPExt(this WebApplicationBuilder builder)
    {
        
        builder.Host
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())  // 工厂替换,把Autofac整合进来
            .ConfigureContainer<ContainerBuilder>(containerBuilder =>
            {
                // 依赖注入
                containerBuilder.RegisterType<CustomInterceptor>(); 
                containerBuilder.RegisterType<Student>().As<IStudent>().EnableClassInterceptors(); // 开启类拦截器 
                // containerBuilder.RegisterType<Student>().As<IStudent>().EnableInterfaceInterceptors(); // 开启接口拦截器
            });
    }
}

二、类拦截 案例

创建 StudentIStudent 测试类和接口

在这里插入图片描述

using Autofac.Extras.DynamicProxy;
 
namespace LOG.Test;
 
 
public interface IStudent
{
    void Method_A(string name);
    
    void Method_B(string name);
    
    void Method_C(string name);
}
 
 
[Intercept(typeof(CustomInterceptor))]
public class Student : IStudent
{
    public void Method_A(string name)
    {
        Console.WriteLine("Method_A" + name);
    }
 
    public virtual void Method_B(string name)
    {
        Console.WriteLine("Method_B" + name);
    }
 
    public void Method_C(string name)
    {
        Console.WriteLine("Method_C" + name);
    }
}

创建 – CustomInterceptor (自定义拦截器)

在这里插入图片描述

using Castle.DynamicProxy;
 
namespace LOG.Test;
 
/// <summary>
/// 自定义 方法拦截器
/// </summary>
public class CustomInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        Console.WriteLine($"----Before--{invocation.Method.Name}-------");
        invocation.Proceed();
        Console.WriteLine($"----After---{invocation.Method.Name}-------");
    }
}

创建 – 控制器 – 测试

在这里插入图片描述
在这里插入图片描述

三、接口拦截器 案例

开启 接口拦截器

// 在 Program.cs 配置 builder.AddAOPExt();
 
//自定义 AOP 扩展
public static class CustomAOPExt
{
    public static void AddAOPExt(this WebApplicationBuilder builder)
    {
        
        builder.Host
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())  // 工厂替换,把Autofac整合进来
            .ConfigureContainer<ContainerBuilder>(containerBuilder =>
            {
                // 依赖注入
                containerBuilder.RegisterType<CustomInterceptor>(); 
                // containerBuilder.RegisterType<Student>().As<IStudent>().EnableClassInterceptors(); // 开启类拦截器 
                containerBuilder.RegisterType<Student>().As<IStudent>().EnableInterfaceInterceptors(); // 开启接口拦截器
            });
    }
}

标识接口

using Autofac.Extras.DynamicProxy;
 
namespace LOG.Test;
 
 
[Intercept(typeof(CustomInterceptor))]
public interface IStudent
{
    void Method_A(string name);
    
    void Method_B(string name);
    
    void Method_C(string name);
}
 
 
public class Student : IStudent
{
    public void Method_A(string name)
    {
        Console.WriteLine("Method_A" + name);
    }
 
    public virtual void Method_B(string name)
    {
        Console.WriteLine("Method_B" + name);
    }
 
    public void Method_C(string name)
    {
        Console.WriteLine("Method_C" + name);
    }
}

创建 – CustomInterceptor (自定义拦截器)

using Castle.DynamicProxy;
 
namespace LOG.Test;
 
/// <summary>
/// 自定义 方法拦截器
/// </summary>
public class CustomInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        Console.WriteLine($"----Before--{invocation.Method.Name}-------");
        invocation.Proceed();
        Console.WriteLine($"----After---{invocation.Method.Name}-------");
    }
}

创建 – 控制器

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值