netcore使用AutoFac实现AOP
时间:2020-03-08
本文章向大家介绍netcore使用AutoFac实现AOP,主要包括netcore使用AutoFac实现AOP使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第一步,添加程序集引用
在Nuget中搜索autofac找到Autofac.Extras.DynamicProxy并安装。
第二步:添加拦截器
/// <summary> /// 拦截器(实现 Castle.DynamicProxy.IInterceptor)接口 /// </summary> public class CustomAutoFacAOPInterception : IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine("执行之前可以写日志、参数检查……");
//可以捕获异常 invocation.Proceed(); Console.WriteLine("执行之后可以写日志……"); } } /// <summary> /// person服务接口 /// </summary> public interface IPerson { string Speak(); } /// <summary> /// 接口的实现类 /// 注意,与Unity实现aop不同,autofac是作用于实现类而不是接口 /// </summary> [Intercept(typeof(CustomAutoFacAOPInterception))] public class Person : IPerson { public string Speak() { return "你好,我是一个Person"; } }
第三步,在注册模块注册拦截器并启用AOP拦截
/// <summary> /// AutoFac注册模块 /// </summary> public class CustomAutoFacModule: Autofac.Module { /// <summary> /// 重写父类的Load方法 /// </summary> /// <param name="builder"></param> protected override void Load(ContainerBuilder builder) { //1、注册拦截器 builder.Register(a => new CustomAutoFacAOPInterception()); //2、设置该类型允许AOP拦截 builder.RegisterType<Person>().As<IPerson>().EnableInterfaceInterceptors().SingleInstance(); builder.RegisterType<UserProvider>().As<IUserService>().SingleInstance();//感叹,这语法,真的是不能再爽了 //后面可以注册好多类型…… //后面可以注册好多类型…… //后面可以注册好多类型…… //后面可以注册好多类型…… } }
第四步,调用
public class InterceptDemoController : Controller { private IPerson _personService = null; /// <summary> /// 构造注入 /// </summary> /// <param name="person"></param> public InterceptDemoController(IPerson person) { _personService = person; } public IActionResult Index() { string rel = _personService.Speak(); return Content(rel); } }
原文地址:https://www.cnblogs.com/chenxizhaolu/p/12442528.html
- Oracle 12c系列(四)|资源隔离之IO、内存、CPU
- Python:gethostbyname获取本地ip地址
- Oracle 12c系列(五)|PDB Refresh
- hdu 2473 Junk-Mail Filter (并查集之点的删除)
- Python:platform获取操作系统详细信息
- java版本的学生管理系统
- Python:获取目录下指定后缀的文件
- Go语言基于Socket编写服务器端与客户端通信的实例
- Linux强制用户首次登陆修改密码
- crontab执行python脚本提示ImportError解决方法
- Java学习之约瑟夫环的两中处理方法
- Zabbix实现QQ报警配置
- 限制用户使用su切换身份
- 微信小程序优秀开发资源汇总
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php语法检查的方法总结
- PHP实现浏览器格式化显示XML的方法示例
- Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
- PHP的mysqli_stmt_init()函数讲解
- PHP内置函数生成随机数实例
- PHPStudy下如何为Apache安装SSL证书的方法步骤
- PHP的mysqli_thread_id()函数讲解
- thinkPHP框架中layer.js的封装与使用方法示例
- OpenCV+python实现实时目标检测功能
- 在tensorflow实现直接读取网络的参数(weight and bias)的值
- python tkiner实现 一个小小的图片翻页功能的示例代码
- 在Pytorch中使用Mask R-CNN进行实例分割操作
- PHP类的自动加载机制实现方法分析
- strpos() 函数判断字符串中是否包含某字符串的方法
- Laravel框架基于ajax和layer.js实现无刷新删除功能示例