题 为什么在IWindsorContainer上使用IKernel?


我在几个人们使用过的代码示例中看到过 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,请使用完整的容器。我错了吗?为什么?


13
2017-07-22 20:10


起源




答案:


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

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


18
2017-07-23 01:11



谢谢你的历史。所以如果我说我使用温莎,我会假设前进,我真的不需要使用IKernal,除非我特别使用需要旧内核的东西吗? - CrazyDart
是否仍然可以自动注册IKernel但IWindsorContainer不是? - Keith Bloom
有点。 IKernel 可用作依赖OOTB,IWindsorContainer不是,因为它是面向用户的接口 - Krzysztof Kozmic