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

目录

一、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.RegisterType(); 
                containerBuilder.RegisterType().As().EnableClassInterceptors(); // 开启类拦截器 
                // containerBuilder.RegisterType().As().EnableInterfaceInterceptors(); // 开启接口拦截器
            });
    }
}

二、类拦截 案例  

创建 Student 和 IStudent  测试类和接口

.Net6 Web Core API --- Autofac -- AOP_第1张图片

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  (自定义拦截器).Net6 Web Core API --- Autofac -- AOP_第2张图片

 

using Castle.DynamicProxy;

namespace LOG.Test;

/// 
/// 自定义 方法拦截器
/// 
public class CustomInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        Console.WriteLine($"----Before--{invocation.Method.Name}-------");
        invocation.Proceed();
        Console.WriteLine($"----After---{invocation.Method.Name}-------");
    }
}

创建 -- 控制器 -- 测试

.Net6 Web Core API --- Autofac -- AOP_第3张图片

 

.Net6 Web Core API --- Autofac -- AOP_第4张图片

 

三、接口拦截器 案例

开启 接口拦截器

// 在 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.RegisterType(); 
                // containerBuilder.RegisterType().As().EnableClassInterceptors(); // 开启类拦截器 
                containerBuilder.RegisterType().As().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;

/// 
/// 自定义 方法拦截器
/// 
public class CustomInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        Console.WriteLine($"----Before--{invocation.Method.Name}-------");
        invocation.Proceed();
        Console.WriteLine($"----After---{invocation.Method.Name}-------");
    }
}

创建 -- 控制器 

.Net6 Web Core API --- Autofac -- AOP_第5张图片

.Net6 Web Core API --- Autofac -- AOP_第6张图片


 

如有错误,烦请批评指正

你可能感兴趣的:(Web,Core,API,.net,AOP)