.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 来实现注册同一服务类型的多个服务实例。