Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Может ли Виндзор взаимодействовать с другим контейнером IoC?

Автор вопроса: Sebastian GoodОтветов: 1

В основе нашего приложения мы используем Castle Windsor для управления нашими зависимостями. Мы будем загружать плагины от третьих лиц, которые могут использовать свои собственные контейнеры IoC. Мы бы хотели, чтобы они могли получать зависимости от ядра, например посредством внедрения в конструктор основных сервисов, но также получают зависимости от своего собственного контейнера IoC.

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

Но я также уверен, что есть некоторые тонкости, которые возникают, когда вы пытаетесь сделать что-то подобное.

  • Это очень плохая идея. Смешивание контейнеров похоже на смешивание спиртов - оно никогда не заканчивается хорошо. Krzysztof Kozmic 13.05.2011
  • Это, конечно, вызывает похмелье, но, конечно, мы не первое приложение, которое хочет использовать один контейнер, но подружиться с библиотеками, которые выбрали другой. Sebastian Good 13.05.2011
  • Похоже, здесь мы пытаемся решить ту же проблему. Прочтите это сообщение: stackoverflow.com/questions/6238431/common-service-registry. Удалось найти решение? Lawrence Wagerfield 05.06.2011

dependency-injectioncastle-windsor

Ответы

Ответ 1 · рейтинг 6 · Mark Seemann

В этом нет необходимости. Если вы разрешите этим плагинам использовать Constructor Injection для получения соответствующих услуг из вашего хост-приложения, Castle Windsor сможет правильно подключить плагин. Плагины просто используют внедрение конструктора как способ статического объявления зависимости, так что, пока Windsor может разрешить зависимость, плагин получит ее.

То, что происходит внутри каждого подключаемого модуля (включая использование других контейнеров), не имеет значения для хост-приложения.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы