ASP.NET-键控服务依赖注入

ASP.NET-键控服务依赖注入

键控服务依赖注入的方式很简单,下面我将从一个例子来说说如何实现
例:我们有一个存储数据的服务,我们既需要存在文件中也需要存在数据库中,这时候我们就会有两个服务的实现

基础类

public interface IDataService
{
void SaveData(string data);
}

public class LocalDataStorage : IDataService
{
public void SaveData(string data)
{
Console.WriteLine(“方法1: ” + data);
}
}

public class FileDataStorage : IDataService
{
public void SaveData(string data)
{
Console.WriteLine(“方法2: ” + data);
}
}

注册

我们通过名称为不同的实现传入了名称

builder.Services.AddKeyedSingleton<IDataService, LocalDataStorage >(“Fun1”);
builder.Services.AddKeyedSingleton<IDataService, FileDataStorage >(“Fun2”);

解析服务

1.构造函数获取

我们可以在构造函数中进行注入,在这里我们需要用到[FromKeyedServices(“名称”))特性来标记需要获取哪个实现。

public class DataController : ControllerBase
{
private readonly IDataService dbService;
private readonly IDataService fileService;

public DataController(
[FromKeyedServices(“Fun1”)] IDataService dbService,
[FromKeyedServices(“Fun2”)] IDataService fileService)
{
dbService= dbService;
fileService= fileService;
}
}

在例子中我们在构造函数中注入了两种实现。

2.通过 IServiceProvider 手动解析

public class MyService
{
private readonly IDataService _dbService;

public MyService(IServiceProvider serviceProvider)
{
_dbService = serviceProvider.GetRequiredKeyedService<IDataService>(“Fun1”);
}
}

建议
我们在使用键控服务依赖注入时,我们尽量不使用字符串这种硬编码作为KEY名称,建议使用nameof或者枚举作为KEY值进行服务的解析

优势
NET 8键控服务依赖项注入功能弥补了之前版本接口不能多个实现的缺陷。键控服务依赖项注入提供了一种强大的机制来管理和解析接口的多个实现。它允许开发人员根据提供的密钥选择特定的实现,从而实现更灵活、更高效的应用程序设计。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/Maybe_ch/article/details/149585723

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

66源码网 » ASP.NET-键控服务依赖注入

提供最优质的资源集合

立即查看 了解详情