我得到了以下块
container.RegisterType<IService, ServiceA>("a");
container.RegisterType<IService, ServiceB>("b");
我想要一个类型为Dictionary<string,IService>
的词典。
我将在API休息中通过参数接收服务名称,我的想法是基于该参数从字典获取我需要的实现。
我无法弄清楚如何将Dictionary(带有已解析的类)注入我的业务类。 我想做这样的事情。
private readonly IDictionary<string,IService> serviceDictionary;
public ClassConstructor (IDictionary<string,IService> dictionary)
{
this.serviceDictionary = dictionary;
}
答案 0 :(得分:2)
您不应该将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>();