实用技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > ASP.NET > 实用技巧 > .net  Keyed Services依赖注入

.NET 8 中的 Keyed Services解锁依赖注入的新方式(最新推荐)

作者:t0_54coder

.NET8引入KeyedServices,允许通过键区分同一接口的不同实现,简化服务选择逻辑,通过注册和注入特性实现灵活依赖管理,提升代码可维护性,但需.NET8及以上版本支持,本文给大家介绍.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,它有两个实现:SampleDSampleE。我们希望根据一个枚举值来选择具体的实现。

首先,定义枚举类型:

public enum ServiceInstanceEnum { SampleE, SampleD }

然后,在Program.csStartup.cs中注册服务:

builder.Services.AddKeyedScoped<ISampleC, SampleD>(ServiceInstanceEnum.SampleD);
builder.Services.AddKeyedScoped<ISampleC, SampleE>(ServiceInstanceEnum.SampleE);

这里,我们使用AddKeyedScoped方法将SampleDSampleE分别与枚举值关联起来。

在控制器中使用

在控制器中注入特定服务实例:

public class WeatherForecastController : Controller
{
    private readonly ISampleC _sampleC;
    public WeatherForecastController(
        ILogger<WeatherForecastController> logger,
        [FromKeyedServices(ServiceInstanceEnum.SampleE)] ISampleC sampleC)
    {
        _logger = logger;
        _sampleC = sampleC;
    }
    // 控制器的其他方法
}

通过[FromKeyedServices]特性,我们可以指定需要注入的ISampleC实例的键值。

好处与限制

结论

Keyed Services 是一个强大的工具,它扩展了.NET DI 容器的能力,使得服务的选择和注入变得更加直观和灵活。通过这篇博客的介绍和示例,你应该能够开始在自己的项目中尝试和使用这一新特性。记住,DI 容器不仅仅是用来注入依赖的,它还可以帮助你管理复杂的服务实例选择逻辑,提高代码的可维护性和可测试性。

到此这篇关于.NET 8 中的 Keyed Services:解锁依赖注入的新方式的文章就介绍到这了,更多相关.net Keyed Services依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文