Зачем использовать IKernel для IWindsorContainer?
Я видел несколько примеров кода, в которых люди использовали IKernel
, а не использовали IWindsorContainer
. Почему это?
Вот один пример: http://docs.castleproject.org/(S(kwaa14uzdj55gv55dzgf0vui))/Windsor.Windsor-tutorial-part-two-plugging-Windsor-in.ashx
В приведенном выше примере мне пришлось укусить меня, потому что я добавил subresolver
Container.Kernel.Resolver.AddSubResolver(
new CollectionResolver(Container.Kernel, true));
который позволит мне вводить коллекции... но все же он не работал. Я понял, что, поскольку использовался только IKernel
, он не мог использовать полные возможности Windsor. Почему кто-то хочет использовать Ядро над полным контейнером? Я думаю, что если вы собираетесь внедрять Windsor, используйте полный контейнер. Я ошибаюсь? Почему?
Ответы
Ответ 1
Есть исторические причины для этого. Первоначально проект Castle состоял из двух контейнеров: MicroKernel (IKernel
), который обеспечивал все базовые функциональные возможности и точки расширения, а Windsor IWindsorContainer
, который был оберткой вокруг MicroKernel, предоставляющей дополнительные функции (такие как конфигурация XML, прокси и т.д.) И обертывал MicroKernel.
Те были позже (в версии 2.5) объединены в один проект/сборку, но чтобы не нарушать существующих пользователей, различие сохранялось.