当前位置: 首页 > news >正文

.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 =>{// 依赖注入containerBuilder.RegisterType<CustomInterceptor>(); containerBuilder.RegisterType<Student>().As<IStudent>().EnableClassInterceptors(); // 开启类拦截器 // containerBuilder.RegisterType<Student>().As<IStudent>().EnableInterfaceInterceptors(); // 开启接口拦截器});}
}

二、类拦截 案例  

创建 Student 和 IStudent  测试类和接口

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

创建 -- 控制器 


 

如有错误,烦请批评指正

http://www.lryc.cn/news/110156.html

相关文章:

  • RocketMQ基本概念和高级原理
  • 小白到运维工程师自学之路 第六十六集 (docker 网络模型)
  • Go和Java实现建造者模式
  • AutoSAR系列讲解(实践篇)11.6-服务映射(自顶向下)
  • EXCEL, 用if({1,0,0} ...) 实现把给定的区域,输出为任意你想要的矩阵,数组区域!
  • c++实现Qt对象树机制
  • 骨传导蓝牙耳机排行榜,精选五款排名最靠前的耳机
  • JDBC用法小结
  • MySQL 数据表在什么情况下容易损坏
  • 【设计模式——学习笔记】23种设计模式——访问者模式Visitor(原理讲解+应用场景介绍+案例介绍+Java代码实现)
  • Ubuntu安装MySQL 8.0与Navicat
  • GB28181智慧可视化指挥控制系统之执法记录仪设计探讨
  • 【SpringBoot】自动配置自动加载controller的原理
  • Docker Enable live
  • 9.物联网操作系统之软件定时器
  • Windows Server 2012 R2 安装 Oracle RAC 11g R2
  • 本地shell无法连接ubuntu,解决办法?
  • 关于openwrt的802.11w 管理帧保护使用
  • centos手动离线安装php,nginx
  • Java基础六 - Collection集合List、Set、Queue,Map
  • k8s nginx+ingress 配置
  • 探索Streamlit中强大而灵活的 st.write() 函数(五):构建丰富多样的应用界面
  • LinAlgError: Singular matrix 问题解决
  • 【ASP.NET MVC】使用动软(五)(13)
  • MongoDB面试题
  • Python Web 开发 Flask 介绍
  • 本地mvn仓库清理无用jar包
  • MySQL的常用函数大全
  • 一百四十三、Linux——Linux的CentOS 7系统语言由中文改成英文
  • 一 关于idea如何在svn进行项目下载并运行成功