как установить зависимости с помощью виндзорского замка в многоуровневой архитектуре - PullRequest
0 голосов
/ 23 июня 2011

Я использую Castle Windsor для ioc в проекте MVC.

Моя архитектура в основном Web -> Службы -> Данные

Контроллеры имеют службы как зависимости. Службы имеют репозитории как зависимости на уровне данных.

Мой веб-слой не имеет ссылки на слой данных. Моя проблема в том, что я пытаюсь зарегистрировать свои репозитории, которые зависят от моих сервисов. Если у меня есть отдельный контейнер на уровне сервисов, который регистрирует репозитории, как мне его загрузить?

Или я могу поступить неправильно.

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Как насчет этого. Недостатком является то, что вам нужно жестко закодировать имя вашего dll-хранилища, но вы всегда можете переместить его в web.config и т. Д., Что будет немного чище.

IWindsorContainer container = new WindsorContainer();

// Register repositories
_container.Register(
        AllTypes.Pick()
                .FromAssemblyNamed("MyDataLayerAssembly")
                .WithService
                .DefaultInterface());

// Register services
_container.Register(
        AllTypes.Pick()
                .FromAssemblyNamed(typeof(ISomeService).Assembly.GetName().Name)
                .WithService
                .DefaultInterface());

ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));

Возможно, вам просто нужно настроить то, что было передано в Register() методы, чтобы удовлетворить ваши потребности.

0 голосов
/ 23 июня 2011

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

Этот вопрос содержит дополнительную информацию.

См. mvc extensions , чтобы узнать о некоторых продвинутых способах достижения этой цели.

...