Именованные службы в контейнерах IoC - плохая идея?

Использование служебных ключей (или «именованных служб») при создании контейнера) кажется плохой идеей.

Использование именованных служб требует, чтобы мы либо аннотировали параметры нашего конструктора соответствующими ключами (таким образом, связывая их с контейнером), либо выполняли дополнительные подключения для каждой из наших служб (таким образом, теряя большую часть автоматизации из контейнера).

Например, в настоящее время у меня есть следующий интерфейс, который реализован следующими классами:

  • IListSerializer
    • CheckboxListSerializer
    • TreeViewListSerializer

У меня также есть бесчисленное количество классов, которые зависят от одного или обоих из этих классов. IListSerializer в качестве моей зависимости, а не реализации. Это означает, что я должен использовать ключи / имена, чтобы различать их, и именно здесь это начинает становиться некрасивым.

Я вижу свои варианты как bei ng одно из следующего:

  • Пометьте параметры конструктора (зависимости) ключами. Пары с контейнером IoC.
  • Выполните ручное подключение в корневом каталоге композиции. Добавляет повторяющееся раздувание.
  • Ссылка на классы вместо интерфейса. Похоже на хакерство только для удовлетворения требований контейнера IoC.

Есть предложения?

5
задан Lawrence Wagerfield 12 July 2011 в 16:53
поделиться