AOP in .Net5 -- ActionFilter

     AOP --- 面向切面编程,在不修改原有逻辑代码前提下,实现动态增加新需求
    .Net5中使用Filter实现AOP,主要分为:
        ActionFilter    --    行为方法,
        ResultFilter    --    返回结果,
        ExceptionFilter    --    异常,
        ResourceFilter    --    资源,
        AuthorizationFilter    --    鉴权授权


ActionFilter

    定义CustomActionFilter特性,需要继承Attribute,并实现IActionFilter方法,使用时在Controller的方法上使用特性即可;
    执行顺序为:
--控制器构造函数
--ActionFilter OnActionExecuting方法 
--Action
--ActionFilter OnActionExecuted方法


定义CustomFilter-- ActionFilter


其他方式定义ActionFilter

使用ActionFilter    

    根据在控制器上的行为,这里示范记录日志【提供到Action的日志记录】


定义日志的ActionFilter


控制器上使用ActionFilter

需提前注入DI容器的ActionFilter

当服务使用需要提前注入容器的时候,都是为了在使用时,通过控制反转框架控制合适的时候使用合适的服务;


注册自定义的ActionFilter
控制器中使用ServiceFilter使用在需要使用的地方


定制化FilterFactory

    当以上的TypeFilte和ServiceFilter不能满足某些需求,我们需要自定义Filter的时候,可以进行定制化,即自定义Filter。

    通过F12可以发现,以上的两种通过IOC的依赖注入模式,其实都是实现IFilterFactory接口,再进一步我们可以看到IsReusable属性,它指的是是否可重用,我们需要的是实现方法CreateInstance,这里结合控制反转,其实我们需要的是,通过传入的一个对象类型,返回IFilterMetadata就可以了;


扩展定制化Filter
使用定制化的Filter,这里同时需要提前服务注入哦


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 - 方法执行

你可能感兴趣的:(AOP in .Net5 -- ActionFilter)