Unity Container 解析具有相同接口的对象字典

Unity Container resolve a Dictionary of objects with same Interface

我得到了以下方块

 container.RegisterType<IService, ServiceA>("a");
 container.RegisterType<IService, ServiceB>("b");

我想要一个 Dictionary<string,IService> 类型的字典。

我将在 API 休息时通过参数接收服务名称,我的想法是基于该参数从字典中获取我需要的实现。

我不知道如何将字典(里面有已解析的 classes)注入我的业务 class。 我想做这样的事情。

private readonly IDictionary<string,IService> serviceDictionary;

public ClassConstructor (IDictionary<string,IService> dictionary)
{
    this.serviceDictionary = dictionary;
}

您不应该将 IDictionary<string,IService> 注入到您的组件中,而应该注入一个应用程序定制的抽象:

public interface IServiceProvider
{
    IService GetService(string key);
}

这样您就可以为 Unity 创建如下实现:

public class UnityServiceProvider : IServiceProvider
{
    public IUnityContainer Container { get; set; }

    public IService GetService(string key) => Container.Resolve<IService>(key);
}

现在您可以完成以下注册:

container.RegisterType<IService, ServiceA>("a");
container.RegisterType<IService, ServiceB>("b");
container.RegisterInstance<IService>(new UnityServiceProvider { Container = container });
container.RegisterType<ClassConstructor>();