. NET Внедрение основных ключевых зависимостей - PullRequest
0 голосов
/ 30 марта 2020

Unity, Autofa c и, возможно, довольно много других пакетов внедрения зависимостей - все они поддерживают «контейнеры внедрения ключевых зависимостей», которые позволяют регистрировать несколько реализаций интерфейса и однозначно идентифицировать их по ключу (будь то строка, int , перечисление или что-то еще).

Однако. NET Ядро, насколько я вижу, по крайней мере, не имеет такой функции, и если бы я попытался реализовать что-то подобное, мне пришлось бы сделать обходной путь или найди для него какие-нибудь хакерские решения. Мне интересно, есть ли конкретная причина, по которой это не было введено. NET Core?

Пример Unity:

     container.RegisterType<IService, ServiceImplementation1>("1");
     container.RegisterType<IService, ServiceImplementation2>("2");

Autofa c пример:

     builder.RegisterType<ServiceImplementation1>().Keyed<IService>("1");
     builder.RegisterType<ServiceImplementation2>().Keyed<IService>("2");

1 Ответ

3 голосов
/ 30 марта 2020

..., есть ли конкретная причина, по которой это не было введено. NET Core?

Краткий ответ: Да

Ссылка Замена контейнера службы по умолчанию

Встроенный контейнер службы разработан для удовлетворения потребностей платформы и большинства пользовательских приложений . Мы рекомендуем использовать встроенный контейнер, если вам не нужна особая c функция, которую встроенный контейнер не поддерживает, например:

  • Внедрение свойства
  • На основе инъекции на имя (он же ключ)
  • Дочерние контейнеры
  • Настраиваемое управление временем жизни
  • Веселье c Поддержка отложенной инициализации
  • Конвенционная регистрация

Примечание: Акцент шахты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...