.Net Core 3.x MVC Filter 与 log4n
2020-10-20 本文已影响0人
单程车票_SJ
特性的依赖注入
1. 特性是编译时确定的
2. 特性构造函数只能传递常量,不能传递变量
修改上一章的例子
1.全局注册
修改 CustomExceptionFilterAttribute.cs 添加 依赖注入日志
![](https://img.haomeiwen.com/i24919392/8530f227d8bedf7e.png)
生成编译 -> 浏览 /filter/index 就直接能生成log文件了,打开log文件看到捕获到的异常
![](https://img.haomeiwen.com/i24919392/44efba1bda0ded0a.png)
![](https://img.haomeiwen.com/i24919392/b5073047846437a6.png)
控制器又如何使用
2. ServiceFilter
先注释之前的全局捕获,然后注册 CustomExceptionFilterAttribute 特性
![](https://img.haomeiwen.com/i24919392/1c98895413d03b90.png)
然后修改 FilterController.cs
![](https://img.haomeiwen.com/i24919392/cb9662b84795711f.png)
生成编译 -> 浏览 /filter/index 就直接能生成log文件了,打开log文件看到捕获到的异常(和第一步的一样操作)
3. TypeFilter
TypeFilter 和 ServiceFilter 一样用就可以测试了
4. IFilterFactory 自定义特性
创建一个特性类 CustomFilterFactoryAttribute.cs ,实现 IFilterFactory 方法
![](https://img.haomeiwen.com/i24919392/a0eef92ff5ea2981.png)
修改 FilterController.cs 的特性
![](https://img.haomeiwen.com/i24919392/74b9c987483a4bb4.png)
生成编译 -> 浏览 /filter/index 就直接能生成log文件了,打开log文件看到捕获到的异常(和第一步的一样操作)
总结
ServiceFilter IFilterFactory TypeFilter 这三个都是基于 FilterFactory
ServiceFilter 和 IFilterFactory 基本一样
TypeFilter 可以构造参数
Filter:MVC流程,流程外处理不了(404)
中间件:任何请求最外层到达,提前做些筛选过滤工作(控制器 和 action 处理不了),不是和业务逻辑
autofac:可以深入到业务逻辑层做扩展 ,依赖注入的方法IA和IA的特性一起使用