.Net8 新特性之键控服务-依赖注入一对多模式

在.NET8 中引入了KeyedService支持,这使得可以支持一对多的依赖注入了。在官方,这个功能叫键化DI服务。

什么是键化DI服务?官方解释是这样的,键化依赖项注入(DI)服务提供了一种适用键来注册和检索DI服务的方法,通过适用键,可以限定注册和使用服务的方式。

看了还是比较懵的话,我们用一个简单的示例来演示一下这个过程。

假设有以下接口和两个实现类:

public interface IOTP
{
    string OTPType(string type);
}

public class TOTP : IOTP
{
    public string OTPType(string type) => "TOTP";
}


public class HOTP : IOTP
{
    public string OTPType(string type) => "HOTP";
}

没有Keyed Service

在没有键控服务的时候,可能要这样注册这两个服务。

builder.Services.AddSingleton<IOTP, TOTP>();
builder.Services.AddSingleton<IOTP, HOTP>();

然后再使用的时候,还是比较麻烦的,要么依次取出服务,再进行判断,要么就更改注册的顺序。

使用Keyed Service

现在有了使用Keyed Service,我们就可以键控服务,进行服务的注册。注册服务时,可以使用AddKeyedSingleton() AddKeyedScoped() AddKeyedTransient() ,进行服务的注册。

builder.Services.AddKeyedSingleton<IOTP, TOTP>("totp");
builder.Services.AddKeyedSingleton<IOTP, HOTP>("hotp");

使用的时候,可以通过[FromKeyedServices(object key)]属性应用服务。例如这样:

public class CreateOTP([FromKeyedServices("totp")] IOTP otp)
{
    public string OTPType(string message) => otp.OTPType(message);
}

也可以通过调用服务的方式,例如:

var app = builder.Build();
var totpServie = app.Services.GetRequiredKeyedService<IOTP>("totp");

var hotpServie = app.Services.GetRequiredKeyedService<IOTP>("hotp");

这样就比较用了。

总结

暂无,下次再会!

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾斜的水瓶座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值