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