欢迎大家阅读《朝夕Net社区技术专刊》第5期
我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!
01
PART
CoreFilter多种注册方式
在上一篇的文章中;定义的几个Filter,在截图看到了有带参数ILoggerFactory loggerFactory的;而且在执行的时候,在控制器方法中直接用中括号标记注册Filters是无法传递ILoggerFactory参数的,那如何让Filter注册可以支持带参数的构造函数呢?还有其他几种注册方式,可以支持传递参数、其实是通过IOC依赖注入进去的参数;
一.直接通过特性标记在方法和控制器,看图1,图2;定义的Filter必须拥有无参数构造函数;不能传递参数。
图1:仅仅只是对当前方法生效
图2:对当前:控制器生效
二.如果需要传递参数怎么办呢?,通过TypeFilter标记在方法和控制器,看图3,图4;定义的Filter中可以不拥有无参数构造函数;且只能有一个合适的构造函数。
图3
图4
三.除了通过TypeFilter注册可以注入参数;还可以通过ServiceFilter (还要在ConfigureService中标记)标记在方法和控制器,看图5,图6;定义的Filter中可以不拥有无参数构造函数;且只能有一个合适的构造函数。
ConfigureService注册服务:
使用TypeFilter 注册Filter 需要在ConfigureService中注册服务;
图5
图6
其实TypeFilter和ServiceFilter都是实现IFilterFactory接口通过CreateInstance方法创建的Filter实例,此处也可以扩展定制创建;详情可联系助教老师(微信:ZhaoxiNet007)获取
四.全局注册:直接上代码,看图7,定义的Filter中可以不拥有无参数构造函数;且只能有一个合适的构造函数.全局注册以后,整个项目中都会生效;
图7
那么上面说了,TypeFilter和ServiceFilter 都是实现了IFilterFactory接口来实现的;那是不是可以自定义扩展一个呢? 当然OK 的;如图8
图8
图9
图10
自定义CustomIOCFilterFactory 特性来注册Filter支持依赖注入;其实都是实现自IFilterFactory 接口;
下期预告
【朝夕Net社区技术专刊】第6期:
WebApi_Filter-Authorize授权鉴权详解