美文网首页
AOP in .Net5 -- ActionFilter

AOP in .Net5 -- ActionFilter

作者: 王清水 | 来源:发表于2021-02-21 15:37 被阅读0次

         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

          本文链接:https://www.haomeiwen.com/subject/lkfxfltx.html