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

目录

[一、AOP 封装](#一、AOP 封装)

[二、类拦截 案例](#二、类拦截 案例)

[三、接口拦截器 案例](#三、接口拦截器 案例)


AOP拦截器 可开启 类拦截器接口拦截器

类拦截器 --- 只有方法标注 virtual标识才会启动

接口拦截器 --- 所有实现接口的方法都会启动

一、AOP 封装

cs 复制代码
// 在 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(); // 开启接口拦截器
            });
    }
}

二、类拦截 案例

创建 Student 和 IStudent 测试类和接口

cs 复制代码
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 (自定义拦截器)

cs 复制代码
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}-------");
    }
}

创建 -- 控制器 -- 测试

三、接口拦截器 案例

开启 接口拦截器

cs 复制代码
// 在 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(); // 开启接口拦截器
            });
    }
}

标识接口

cs 复制代码
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 (自定义拦截器)

cs 复制代码
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}-------");
    }
}

创建 -- 控制器


如有错误,烦请批评指正

相关推荐
唐青枫1 小时前
从入门到进阶:C#.NET Stopwatch 计时与性能测量全攻略
c#·.net
私人珍藏库2 小时前
[Windows] 微软 .Net 运行库离线安装包 | Microsoft .Net Packages AIO_v09.09.25
microsoft·.net·运行库
追逐时光者12 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
后端·.net
追逐时光者12 小时前
C#/.NET/.NET Core编程技巧练习集,配套详细的文章教程讲解!
后端·.net
咕白m62520 小时前
C# Excel 读取入门教程:免费实现方法
c#·.net
唐青枫1 天前
FluentData 从入门到精通:C#.NET 数据访问最佳实践
c#·.net
余衫马2 天前
开发指南:使用 MQTTNet 库构建 .Net 物联网 MQTT 应用程序
物联网·mqtt·.net
William Wang~2 天前
.net 类库生成的DLL源码混淆加密
.net
一个帅气昵称啊3 天前
Docker命令大全:从基础到高级实战指南
docker·容器·eureka·架构·.net
Eiceblue3 天前
使用 C# 设置 Excel 单元格格式
开发语言·后端·c#·.net·excel