如何检查服务已在依赖注入容器中注册
前言
依赖关系注入(DI),是一种在类及其依赖项之间实现控制反转(IoC)的技术。在ASP.NET Core中,依赖关系注入是“一等公民”,被大量使用。
但是有时,我们仅仅只需要知道服务是否在依赖注入容器中已注册。
比如,不注册使用分布式缓存时,就不处理缓存逻辑。
但是,直接使用依赖注入,下列代码会报错:
private readonly IDistributedCache cache;public WeatherForecastController(IDistributedCache cache)
{this.cache = cache;
}
有不有什么方法可以解决呢?
IServiceProvider 接口
可以使用IServiceProvider
接口来解决:
public WeatherForecastController(IServiceProvider serviceProvider)
{useCache = serviceProvider.GetService(typeof(IDistributedCache)) != null;
}
当服务未注册时,GetService
方法返回值为 null。
但是,这种方式会存在一定的性能问题。
因为这样做会实例化一个对象,而我们仅仅需要知道服务是否已注册。
IServiceProviderIsService 接口
面对这种需求,.NET 6 中提供了一个新接口IServiceProviderIsService
可以解决:
app.MapGet("/", (IServiceProviderIsService serviceProviderIsService) =>
{return serviceProviderIsService.IsService(typeof(IDistributedCache));
});
此接口实例允许使用者查询服务是否可解析,而不会产生副作用(不必显式解析服务)。
当服务未注册时,IsService
方法返回值为 false。
结论
今天,我们介绍了2种方法检查服务是否已在 DI 容器中注册。
想了解更多内容,请关注我的个人公众号”My IO“
如何检查服务已在依赖注入容器中注册相关推荐
- ASP.NET Core依赖注入容器中的动态服务注册
介绍 在ASP.NET Core中,每当我们将服务作为依赖项注入时,都必须将此服务注册到ASP.NET Core依赖项注入容器.但是,一个接一个地注册服务不仅繁琐且耗时,而且容易出错.因此,在这里,我 ...
- Pimple - 一个简单的 PHP 依赖注入容器
链接 官网 WebSite GitHub - Pimple 这是 Pimple 3.x 的文档.如果你正在使用 Pimple 1.x ,请查看 Pimple 1.x 文档. 阅读 Pimple 1.x ...
- spring依赖注入_Spring源码阅读:Spring依赖注入容器
依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...
- 又一个强大的PHP5.3依赖注入容器
简单的服务容器 一个简单的 php 5.3 依赖注入容器. 项目地址:https://github.com/godruoyi/easy-container Why 目前比较流行的 PHP 容器: Pi ...
- 依赖注入容器Autofac的详解[转]
依赖注入容器Autofac的详解 发表于 2011 年 09 月 22 日 由 renfengbin 分享到:GMAIL邮箱 Hotmail邮箱 delicious digg Auto ...
- asp.net core自定义依赖注入容器,替换自带容器
依赖注入 在asp.net core程序中,众所周知,依赖注入基本上贯穿了整个项目,以通用的结构来讲解,控制器层(Controller层)依赖业务层(Service层),业务层依赖于仓储层(Repos ...
- python需要依赖注入吗_是否需要使用依赖注入容器?
译文首发于 是否需要使用依赖注入容器?,转载请注明出处. 本文是依赖注入(Depeendency Injection)系列教程的第 2 篇文章,本系列教程主要讲解如何使用 PHP 实现一个轻量级服务容 ...
- 依赖注入容器Unity Application Block快速入门
概述 Unity是微软模式与实践团队开发的一个轻量级.可扩展的依赖注入容器,之前我也有过一篇文章<Enterprise Library 4.0中的依赖注入容器(Unity)预览>对其做过介 ...
- 关于微软企业库中依赖注入容器Unity两种生成对象的实现
看了很多牛人关于Unity的文章后,深有感触 下面简单介绍下UnityContainer 怎么注册和生成具体类的对象 假设我们一个命名空间为UnityContainerText的项目中拥有一个接口和实 ...
最新文章
- LSGO:祝大家新年快乐!
- [实验]-从汇编代码来看volatile关键字的作用
- 实现canvas连线
- list中抽出某一个字段的值_使用LINQ获取List列表中的某个字段值
- usnews 计算机专业排名,2019美国大学USNews计算机专业排名
- 打开和关闭Oracle Flashback
- channels2.X 学习笔记
- 工业以太网交换机的接口知识详解
- java tomcat重启linux_Linux下tomcat重启
- python索引例子_Python实现带下标索引的遍历操作示例
- Windows 2000安装和配置RIS服务
- MacOS自动操作Automator的技巧
- python运维脚本面试_参加Linux运维面试时经常会被问到的shell脚本问题有哪些?
- 支付宝客户端java版_支付宝对接支付-JAVA版
- SQL Server【获取当前时间】
- ios 测试证书配置
- matlab 传函将s换为jw,已知单位负反馈系统开环传递函数为20 s(0.5s 1),
- Android获取系统字体的大小,修改android系统字体大小
- 深入浅出java并发编程(线程池)
- matlab求解整数规划问题