为什么要使用IKernel而不是IWindsorContainer?

14

我看过好几个代码示例,人们使用了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的全部功能。为什么有人会选择使用Kernel而不是完整的容器呢?我认为,如果要使用Windsor,就应该使用完整的容器。我错了吗?为什么?

1个回答

20

这样做有历史原因。最初的Castle项目有两个容器:MicroKernel (IKernel)提供所有基础功能和扩展点,而Windsor IWindsorContainer是MicroKernel的包装器,提供了其他功能(如XML配置、代理等)并包装了MicroKernel。

后来在v2.5中将它们合并为一个单一的项目/程序集,但为了避免破坏现有用户,仍然保留了这种区分。


谢谢提供历史信息。所以我认为,如果我说我正在使用Windsor,除非我在使用需要旧IKernel的东西,否则我不需要使用IKernal,对吗? - CrazyDart
IKernel是否仍然会自动注册,但IWindsorContainer不会? - Keith Bloom
1
“kind of”。“IKernel”作为一个依赖项,可以直接使用,而“IWindsorContainer”不行,因为它是一个面向用户的接口。 - Krzysztof Kozmic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接