.NET 8 中的 Keyed Services解锁依赖注入的新方式(最新推荐)
在.NET 8 发布之后,依赖注入(Dependency Injection,DI)体系迎来了一个全新的功能——Keyed Services。这篇博客将带你探索如何通过Keyed Services来实现基于特定键选择服务实例的方法。
什么是Keyed Services?
传统的DI容器允许你注册服务,但并没有提供一个简单的方式来区分同一个接口的不同实现。Keyed Services的引入解决了这个问题,它允许你使用键(可以是任何类型,包括字符串、枚举等)来标识不同的服务实例。
如何使用Keyed Services?
让我们以一个具体的示例来展示如何在.NET 8 中使用Keyed Services。
假设我们有一个接口ISampleC,它有两个实现:SampleD和SampleE。我们希望根据一个枚举值来选择具体的实现。
首先,定义枚举类型:
public enum ServiceInstanceEnum { SampleE, SampleD }
然后,在Program.cs或Startup.cs中注册服务:
builder.Services.AddKeyedScoped<ISampleC, SampleD>(ServiceInstanceEnum.SampleD); builder.Services.AddKeyedScoped<ISampleC, SampleE>(ServiceInstanceEnum.SampleE);
这里,我们使用AddKeyedScoped方法将SampleD和SampleE分别与枚举值关联起来。
在控制器中使用
在控制器中注入特定服务实例:
public class WeatherForecastController : Controller
{
private readonly ISampleC _sampleC;
public WeatherForecastController(
ILogger<WeatherForecastController> logger,
[FromKeyedServices(ServiceInstanceEnum.SampleE)] ISampleC sampleC)
{
_logger = logger;
_sampleC = sampleC;
}
// 控制器的其他方法
}通过[FromKeyedServices]特性,我们可以指定需要注入的ISampleC实例的键值。
好处与限制
好处:
- 更灵活的服务选择方式。
- 避免了创建工厂方法或手动实例化服务的繁琐。
- 能够直接利用DI容器管理服务的生命周期。
限制:
- 需要.NET 8 及以上版本。
- 对于大量键值的管理,可能需要额外的配置和设计考虑。
结论
Keyed Services 是一个强大的工具,它扩展了.NET DI 容器的能力,使得服务的选择和注入变得更加直观和灵活。通过这篇博客的介绍和示例,你应该能够开始在自己的项目中尝试和使用这一新特性。记住,DI 容器不仅仅是用来注入依赖的,它还可以帮助你管理复杂的服务实例选择逻辑,提高代码的可维护性和可测试性。
到此这篇关于.NET 8 中的 Keyed Services:解锁依赖注入的新方式的文章就介绍到这了,更多相关.net Keyed Services依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
在ASP.NET Core中实现Cookie身份验证的方法步骤
ASP.NET Core Identity是一个功能齐全的网站安全框架,它提供了许多特性,例如外部登录和JWT支持,然而,有时您需要的是一种简单易用且能让您完全掌控数据存储和帐户管理等各个方面的解决方案,本文将介绍 Cookie 身份验证的概念以及如何配置它来保护您的网站2026-03-03
ASP.NET Core2静默获取微信公众号的用户OpenId实例代码
这篇文章主要给大家介绍了关于ASP.NET Core2静默获取微信公众号的用户OpenId的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2018-12-12
ASP.NET中GridView、DataList、DataGrid三个数据控件foreach遍历用法示例
这篇文章主要介绍了ASP.NET中GridView、DataList、DataGrid三个数据控件foreach遍历用法,结合实例形式分析了GridView、DataList、DataGrid使用foreach及for语句进行数据遍历的具体使用方法,需要的朋友可以参考下2016-08-08


最新评论