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