前言

依赖关系注入(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“

如何检查服务已在依赖注入容器中注册相关推荐

  1. ASP.NET Core依赖注入容器中的动态服务注册

    介绍 在ASP.NET Core中,每当我们将服务作为依赖项注入时,都必须将此服务注册到ASP.NET Core依赖项注入容器.但是,一个接一个地注册服务不仅繁琐且耗时,而且容易出错.因此,在这里,我 ...

  2. Pimple - 一个简单的 PHP 依赖注入容器

    链接 官网 WebSite GitHub - Pimple 这是 Pimple 3.x 的文档.如果你正在使用 Pimple 1.x ,请查看 Pimple 1.x 文档. 阅读 Pimple 1.x ...

  3. spring依赖注入_Spring源码阅读:Spring依赖注入容器

    依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...

  4. 又一个强大的PHP5.3依赖注入容器

    简单的服务容器 一个简单的 php 5.3 依赖注入容器. 项目地址:https://github.com/godruoyi/easy-container Why 目前比较流行的 PHP 容器: Pi ...

  5. 依赖注入容器Autofac的详解[转]

    依赖注入容器Autofac的详解 发表于 2011 年 09 月 22 日 由 renfengbin 分享到:GMAIL邮箱         Hotmail邮箱 delicious digg Auto ...

  6. asp.net core自定义依赖注入容器,替换自带容器

    依赖注入 在asp.net core程序中,众所周知,依赖注入基本上贯穿了整个项目,以通用的结构来讲解,控制器层(Controller层)依赖业务层(Service层),业务层依赖于仓储层(Repos ...

  7. python需要依赖注入吗_是否需要使用依赖注入容器?

    译文首发于 是否需要使用依赖注入容器?,转载请注明出处. 本文是依赖注入(Depeendency Injection)系列教程的第 2 篇文章,本系列教程主要讲解如何使用 PHP 实现一个轻量级服务容 ...

  8. 依赖注入容器Unity Application Block快速入门

    概述 Unity是微软模式与实践团队开发的一个轻量级.可扩展的依赖注入容器,之前我也有过一篇文章<Enterprise Library 4.0中的依赖注入容器(Unity)预览>对其做过介 ...

  9. 关于微软企业库中依赖注入容器Unity两种生成对象的实现

    看了很多牛人关于Unity的文章后,深有感触 下面简单介绍下UnityContainer 怎么注册和生成具体类的对象 假设我们一个命名空间为UnityContainerText的项目中拥有一个接口和实 ...

最新文章

  1. LSGO:祝大家新年快乐!
  2. [实验]-从汇编代码来看volatile关键字的作用
  3. 实现canvas连线
  4. list中抽出某一个字段的值_使用LINQ获取List列表中的某个字段值
  5. usnews 计算机专业排名,2019美国大学USNews计算机专业排名
  6. 打开和关闭Oracle Flashback
  7. channels2.X 学习笔记
  8. 工业以太网交换机的接口知识详解
  9. java tomcat重启linux_Linux下tomcat重启
  10. python索引例子_Python实现带下标索引的遍历操作示例
  11. Windows 2000安装和配置RIS服务
  12. MacOS自动操作Automator的技巧
  13. python运维脚本面试_参加Linux运维面试时经常会被问到的shell脚本问题有哪些?
  14. 支付宝客户端java版_支付宝对接支付-JAVA版
  15. SQL Server【获取当前时间】
  16. ios 测试证书配置
  17. matlab 传函将s换为jw,已知单位负反馈系统开环传递函数为20 s(0.5s 1),
  18. Android获取系统字体的大小,修改android系统字体大小
  19. 深入浅出java并发编程(线程池)
  20. matlab求解整数规划问题

热门文章

  1. turtle具体详解
  2. 计算机二级宏操作,精选!计算机二级Access宏知识整理
  3. java se与java 的区别_java se与java的区别是什么
  4. 键盘按键模拟程序示例
  5. android动态背景色圆形头像
  6. 苹果标志的由来(整理自网上)
  7. KMP的字幕用法之調時同步及保存
  8. 鼠标垫怎么洗,如何清洗电脑鼠标垫
  9. python最擅长做什么_什么是Python?Python擅长什么领域?
  10. VS 游戏:推箱子对战游戏