Правильно ли иметь много контейнеров Castle Windsor на одно приложение, если эти контейнеры принадлежат разным уровням? - PullRequest
0 голосов
/ 19 мая 2009

В последнее время я играл с Castle Windsor и понял, что могу использовать его для поддержки объекта, похожего на контейнер, который я сейчас использую. До сих пор я только читал информацию о приложении, имеющем только один экземпляр контейнера на приложение. Правильно ли иметь много контейнеров на приложение, если эти контейнеры принадлежат разным уровням?

Причина, по которой я спрашиваю, состоит в том, что я хотел бы воспользоваться преимуществами разрешения зависимостей Windsor и конфигурации XML для моего собственного объекта, подобного контейнеру. В настоящее время я использую интеграцию Windsor с MonoRail, и кажется неправильным смешивать компоненты, которые не имеют ничего общего с MonoRail и его уровнем контроллера. Мой второй контейнер будет иметь свой собственный файл конфигурации и не будет знать о MonoRail и контейнере, который он использует. Он полностью находится на другом уровне и в конечном итоге будет зарегистрирован как зависимость для контроллеров MonoRail. У меня такое ощущение, что следует избегать обхода контейнеров, так что это правильный способ избежать этого?

Ответы [ 3 ]

2 голосов
/ 19 мая 2009

Лично у меня нет проблем с использованием только одного контейнера. В конце концов, ваши контроллеры MonoRail будут знать только о тех сервисах / интерфейсах, которые им необходимы, поэтому им не нужно знать о внутренних компонентах других уровней.

Если вы все еще не хотите, чтобы ваши внутренние компоненты были так заметны для остальной части приложения, вот пара идей:

  • Оберните связанные компоненты в учреждениях . Это поможет упростить настройку внутренних компонентов и сохранить их в тайне.
  • Делегирование создания экземпляров компонентов в объект, подобный контейнеру, с использованием фабрики или средств разрешения зависимостей ( ref1 , ref2 , ref3 )
  • Использовать дочерние контейнеры. Я никогда не пробовал их, но похоже, что это может помочь в этой ситуации (см. ref1 , ref2 , ref3 ).

Что бы вы ни делали, вы не хотите, чтобы каждый компонент имел непосредственный доступ к контейнеру. Во всяком случае, сохраните это в своем «клеевом коде».

0 голосов
/ 20 мая 2009

Возможно, вы используете дочерние ядра? Но мне не очень нравится эта идея.

0 голосов
/ 19 мая 2009

Я не думаю, что это хорошая идея иметь много независимых контейнеров. Однако вы можете иметь контейнер mother для всего приложения и контейнер child с более узкой областью действия.

...