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

本文主要是介绍【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎大家阅读《朝夕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授权鉴权详解

这篇关于【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/355370

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Spring-DI依赖注入全过程

《Spring-DI依赖注入全过程》SpringDI是核心特性,通过容器管理依赖注入,降低耦合度,实现方式包括组件扫描、构造器/设值/字段注入、自动装配及作用域配置,支持灵活的依赖管理与生命周期控制,... 目录1. 什么是Spring DI?2.Spring如何做的DI3.总结1. 什么是Spring D

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.