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

 

posted @ 2024-05-12 16:23  Doc.stu  阅读(33)  评论(0编辑  收藏  举报