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

创建 -- 控制器


如有错误,烦请批评指正

相关推荐
界面开发小八哥4 小时前
界面控件DevExpress WinForms v24.2新功能预览 - 人工智能(AI)
人工智能·.net·界面控件·devexpress·ui开发
lzhdim11 小时前
3、.Net UI库:EASkins - 开源项目研究文章
ui·开源·.net
公子小六16 小时前
在WPF程序中实现PropertyGrid功能
windows·microsoft·c#·.net·wpf
CodeCraft Studio1 天前
【实用技能】使用 TX Text Control 创建带有嵌入式附件的 PDF 文档
pdf·asp.net·.net
djk88881 天前
.net6.0(.net Core)读取 appsettings.json 配置文件
json·.net·.netcore
喵叔哟1 天前
16. 【.NET 8 实战--孢子记账--从单体到微服务】--汇率获取定时器
微服务·oracle·.net
zhy8103022 天前
.net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署
pdf·.net·excel
初九之潜龙勿用2 天前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
慧都小妮子2 天前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net