.net core 实现注册同一服务类型的多个服务实例
1. 注册服务。给 IMyDependency 注册两个不同的实现。
builder.Services.AddSingleton<IMyDependency, MyDependency>(); builder.Services.AddSingleton<IMyDependency, DifferentDependency>();
2. 依赖注入。通过 IEnumerable<IMyDependency> 获取两个不同的实现,这里会按注册的顺序获取对应的实现;
[ApiController]
[Route("[controller]/[action]")]
public class TestController : ControllerBase
{
private readonly IMyDependency _myDependency;
private readonly IMyDependency _differentDependency;
public TestController(IEnumerable<IMyDependency> dependencys)
{
var dependencyArray = dependencys.ToArray();
_myDependency = dependencyArray[0];
_differentDependency = dependencyArray[1];
}
[HttpGet]
public string Name()
{
return _myDependency.GetName();
}
[HttpGet]
public string OtherName()
{
return _differentDependency.GetName();
}
}
3. 检验效果。可以看到,第一个方法返回了 Name01,第二方法返回了 Name02。实现了一个接口多个实现的效果。

4. 另外
这里使用的是 .net 6, 若是 .net 8 则可以使用 AddKeyedSingleton 来实现注册同一服务类型的多个服务实例。

浙公网安备 33010602011771号