AOP --- 面向切面编程,在不修改原有逻辑代码前提下,实现动态增加新需求
.Net5中使用Filter实现AOP,主要分为:
ActionFilter -- 行为方法,
ResultFilter -- 返回结果,
ExceptionFilter -- 异常,
ResourceFilter -- 资源,
AuthorizationFilter -- 鉴权授权
ActionFilter
定义CustomFilter-- ActionFilter 其他方式定义ActionFilter定义CustomActionFilter特性,需要继承Attribute,并实现IActionFilter方法,使用时在Controller的方法上使用特性即可;
执行顺序为:
--控制器构造函数
--ActionFilter OnActionExecuting方法
--Action
--ActionFilter OnActionExecuted方法
使用ActionFilter
定义日志的ActionFilter 控制器上使用ActionFilter根据在控制器上的行为,这里示范记录日志【提供到Action的日志记录】
需提前注入DI容器的ActionFilter
注册自定义的ActionFilter 控制器中使用ServiceFilter使用在需要使用的地方当服务使用需要提前注入容器的时候,都是为了在使用时,通过控制反转框架控制合适的时候使用合适的服务;
定制化FilterFactory
扩展定制化Filter 使用定制化的Filter,这里同时需要提前服务注入哦当以上的TypeFilte和ServiceFilter不能满足某些需求,我们需要自定义Filter的时候,可以进行定制化,即自定义Filter。
通过F12可以发现,以上的两种通过IOC的依赖注入模式,其实都是实现IFilterFactory接口,再进一步我们可以看到IsReusable属性,它指的是是否可重用,我们需要的是实现方法CreateInstance,这里结合控制反转,其实我们需要的是,通过传入的一个对象类型,返回IFilterMetadata就可以了;
Filter优先等级
为满足某些场景,全局注册Filter之前的图片测试都是在控制器的方法上,我们还可以在将其使用在全局、控制器、控制器的方法中;
其中全局使用时,需要注册服务;控制器上添加时,和方法添加一样,都是使用特性;
最后试验的得到的结果如下:
1,控制器实例化构造函数执行
2,全局 Filter -OnActionExecuting - 方法执行
3,控制器Filter - OnActionExecuting - 方法执行
4,Action Filter - OnActionExecuting - 方法执行
5,Action逻辑代码执行
6,Action Filter - OnActionExecuted - 方法执行
7,控制器 Filter -OnActionExecuted - 方法执行
8,全局 Filter -OnActionExecuted - 方法执行
网友评论