Как сделать контейнер Castle Windsor доступным в других классах и т. Д.? - PullRequest
0 голосов
/ 12 октября 2011

Мой global.asax соединяет все мои регистрации в замках и т. Д.

Что если мне нужно попросить Виндзор разрешить интерфейс напрямую (за исключением того, что он автоматически подключается с помощью внедрения свойств и т. Д.?

Можно ли сделать:

container.Resolve<ISomeThing>();

Мой global.asax.cs имеет:

 private static IWindsorContainer _container = new WindsorContainer();

 private static void BootstrapContainer()
 {

        _container = new WindsorContainer()
            .AddFacility<TypedFactoryFacility>()
            .Install(FromAssembly.This());

        var controllerFactory = new WindsorControllerFactory(_container.Kernel);
        ControllerBuilder.Current.SetControllerFactory(controllerFactory);
 }

Я немного запутался, как я могу это сделать, и какие области видимостиэтот доступ к Виндзору будет иметь (я предполагаю, что он будет работать только в моих классах приложений asp.net ??)

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Для чего-то подобного я бы рассмотрел Типизированный завод . Вы просто определяете интерфейс для своей фабрики, и Windsor будет перехватывать вызовы методов в интерфейсе и выполнять контейнер. Resolve () для вас - вам не нужно писать реализацию интерфейса.

1 голос
/ 12 октября 2011

Вы можете сделать контейнер общедоступным, а затем получить к нему доступ из других классов, но учтите, что это нехорошая практика и противоречит цели инверсии контроля. Вся идея МОК заключается в том, что классы не должны отвечать за выборку своих зависимых объектов, их следует передавать извне. И поэтому, если вы хотите следовать передовой практике, вся проводка контейнера DI должна быть ограничена одним местом.

...