为什么在IWindsorContainer上使用IKernel?

Cra*_*art 14 c# dependency-injection castle-windsor ioc-container

我在几个代码示例中看到人们使用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));
Run Code Online (Sandbox Code Playgroud)

这将允许我注入集合......但它没有工作.我发现,因为IKernel正在使用它不能使用温莎的全部功能.为什么有人想要在整个容器上使用内核?我想如果您打算实施Windsor,请使用完整的容器.我错了吗?为什么?

Krz*_*mic 19

这有历史原因.最初Castle项目有两个容器:MicroKernel(IKernel)提供所有基本功能和扩展点,Windsor IWindsorContainer是MicroKernel的包装提供附加功能(如XML配置,代理等)并包装MicroKernel.

后来(在v2.5中)将这些合并为单个项目/程序集,但为了避免破坏现有用户,保留了区别.