如何建立购物网站,定制设计网,遵义网吧什么时候恢复营业,深圳外贸公司电话前言依赖关系注入(DI)#xff0c;是一种在类及其依赖项之间实现控制反转(IoC)的技术。在ASP.NET Core中#xff0c;依赖关系注入是“一等公民”#xff0c;被大量使用。但是有时#xff0c;我们仅仅只需要知道服务是否在依赖注入容器中已注册。比如#xff0c;不注册使用分… 前言依赖关系注入(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“