为什么在IWindsorContainer上使用IKernel?

时间:2011-07-22 20:10:28

标签: 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));

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

1 个答案:

答案 0 :(得分:19)

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

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