【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

欢迎大家阅读《朝夕Net社区技术专刊》第5期

我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!

01

PART

CoreFilter多种注册方式

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

在上一篇的文章中;定义的几个Filter,在截图看到了有带参数ILoggerFactory loggerFactory的;而且在执行的时候,在控制器方法中直接用中括号标记注册Filters是无法传递ILoggerFactory参数的,那如何让Filter注册可以支持带参数的构造函数呢?还有其他几种注册方式,可以支持传递参数、其实是通过IOC依赖注入进去的参数; 

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

一.直接通过特性标记在方法和控制器,看图1,图2;定义的Filter必须拥有无参数构造函数;不能传递参数。

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图1:仅仅只是对当前方法生效

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图2:对当前:控制器生效

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

二.如果需要传递参数怎么办呢?,通过TypeFilter标记在方法和控制器,看图3,图4;定义的Filter中可以不拥有无参数构造函数;且只能有一个合适的构造函数。

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图3

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图4

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

三.除了通过TypeFilter注册可以注入参数;还可以通过ServiceFilter (还要在ConfigureService中标记)标记在方法和控制器,看图5,图6;定义的Filter中可以不拥有无参数构造函数;且只能有一个合适的构造函数。

ConfigureService注册服务:

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

使用TypeFilter 注册Filter 需要在ConfigureService中注册服务;

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图5

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图6

其实TypeFilterServiceFilter都是实现IFilterFactory接口通过CreateInstance方法创建的Filter实例,此处也可以扩展定制创建;详情可联系助教老师(微信:ZhaoxiNet007)获取

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

四.全局注册:直接上代码,看图7,定义的Filter中可以不拥有无参数构造函数;且只能有一个合适的构造函数.全局注册以后,整个项目中都会生效;

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图7

那么上面说了,TypeFilterServiceFilter 都是实现了IFilterFactory接口来实现的;那是不是可以自定义扩展一个呢? 当然OK 的;如图8

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图8

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图9

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

图10

自定义CustomIOCFilterFactory 特性来注册Filter支持依赖注入;其实都是实现自IFilterFactory 接口;

下期预告

【朝夕Net社区技术专刊】第6期:

WebApi_Filter-Authorize授权鉴权详解

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入