Я пытаюсь настроить контейнер для регистрации класса, который принимает в своем конструкторе IDictionary<string, IInterface>
, поэтому в моем IoC я хотел бы знать, как получить именованный экземпляр (если эта функция доступна в SI). Примером чего я хочу достичь:Словарь SimpleInjector как аргумент конструктора
container.Register<IOtherInterface>(() =>
new OtherInterface(new Dictionary<string, IInterface>
{
{ "a", container.GetInstance<IInterface>("named-a") },
{ "b", container.GetInstance<IInterface>("named-b") },
});
Есть ли способ настроить это?
Обновлено:
Реализация интерфейса и тот же объект с разными параметрами и пример, который я не смог увидеть в документации SI https://simpleinjector.readthedocs.io/en/latest/howto.html#resolve-instances-by-key. Я хотел бы избежать того факта, что мне нужно создать новый интерфейс (.. с соответствующими параметрами ...) для каждого значения в словаре, поэтому я подумал, что обозначение регистрации было чем-то доступным в SI.
Возможно, мой подход неправильный, и я должен попытаться установить зависимости по-другому.
Пример использования:
public class OtherInterface : IOtherInterface
{
private readonly IDictionary<string, IInterface> _interfces;
public OtherInterface(IDictionary<string, IInterface> interfaces)
{
_interfaces = interfaces;
}
public void DoSomething(MyRequest request)
{
if(_interfaces.ContainKey(request.SelectMyInterface))
{
_interfaces[request.SelectMyInterface].DoSpecificStuff();
}
}
}
Я мог бы потенциально расширить интерфейс IInterface и применить шаблон стратегии здесь имея метод, как Applies(string type)
, но я использовал словарный подход в прошлом с Ninject.
Существует довольно обширная документация о регистрациях с ключами, словарях и фабриках [здесь] (https://simpleinjector.readthedocs.io/en/latest/howto.html#resolve-instances-by-key). Если эта документация не отвечает на ваш вопрос, уточните свой вопрос с более подробной информацией (и не забудьте оставить комментарий, чтобы уведомить всех читателей о том, что ваш вопрос изменился). – Steven
Обновлено с фактическим сценарием, который у меня есть. Я уже читал о регистрациях с ключами, но не смог найти ничего связанного с этим конкретным случаем. –
Как «OtherInterface» определяет, когда использовать 'named-a' или' named-b'? Как определить ключи 'a' и' b'? – Steven