.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}-------");
    }
}

创建 -- 控制器


如有错误,烦请批评指正

相关推荐
时光追逐者6 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 46 期(2025年7.7-7.13)
c#·.net·.netcore
liulilittle6 小时前
.NET ExpandoObject 技术原理解析
开发语言·网络·windows·c#·.net·net·动态编程
王柏龙12 小时前
aspnetcore Mvc配置选项中的ModelBindingMessageProvider
mvc·.net
步、步、为营15 小时前
.NET + WPF框架开发聊天、网盘、信息发布、视频播放功能
.net·wpf·音视频
唐青枫21 小时前
C#.NET 集合框架详解
c#·.net
江沉晚呤时1 天前
在 C# 中调用 Python 脚本:实现跨语言功能集成
python·microsoft·c#·.net·.netcore·.net core
Oberon1 天前
Avalonia硬配.NET Framework 4.8
c#·.net·avalonia·.net framework
xiaopengbc1 天前
MSVCP*.dll、vcruntime*.dll缺失或损坏,以及.NET Framework相关问题,解决办法
.net
xiaopengbc1 天前
.NET Framework 安装失败及异常情况 常用处理方法
.net·.net修复