.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”);
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » .Net8 新特性之键控服务-依赖注入一对多模式