Многократная инверсия контрольных контейнеров по сравнению с единым контейнером - PullRequest
1 голос
/ 02 мая 2011

В некоторых проектах есть некоторые компоненты инверсии управления.

Это компоненты, работающие в различных концептуальных областях - бизнес, графический интерфейс пользователя, глобализация, хранение ... -.

Каким было бы ваше решение?

  • Все компоненты в одном контейнере.
  • Контейнер для концептуальной области.

Буду признателен за и против.

Спасибо за ваши усилия заранее!

1 Ответ

1 голос
/ 02 мая 2011

Просто для согласованности я бы порекомендовал вам использовать одну и ту же реализацию (AutoFac, Unity, Spring whaterver) контейнера для всех концептуальных областей.

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

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

Если ваша реализация IOC затрудняет использованиеотдельные контейнеры для каждой области, не боритесь с этим, либо меняйте его, либо используйте один глобальный контейнер, но будьте осторожны при регистрации компонентов.

В любом случае убедитесь, что ваш код не зависит от реализации IOC.Таким образом, вы можете начать с «один контейнер на все», а затем, если необходимо, перейти к «Контейнер на область».

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