0

я получил следующий блокЕдинство Контейнер разрешения Словарь объектов с таким же интерфейсом

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

Я хочу иметь словарь типа Dictionary<string,IService>.

Я получаю имя службы по параметру в остатке API, и моя идея основана на этом параметре, чтобы получить реализацию, которая мне нужна из Словаря.

Я не могу понять, как ввести словарь (с разрешенными классами внутри) в мой бизнес-класс. Я хочу сделать что-то вроде этого.

private readonly IDictionary<string,IService> serviceDictionary; 

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

ответ

0

Вы не должны вводить IDictionary<string,IService> в компонент, но вместо того, чтобы приложение сшитый абстракция:

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

Таким образом, вы можете создать реализацию единства следующим образом:

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>();