2011-07-22 23 views
13

我在幾個代碼示例中看到人們使用IKernel而不是使用IWindsorContainer。爲什麼是這樣?爲什麼在IWindsorContainer上使用IKernel?

下面是一個例子: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被使用,它不能使用溫莎的全部功能。爲什麼有人想要在整個容器上使用內核?我想如果你要實施溫莎,使用完整的容器。我錯了嗎?爲什麼?

回答

18

有這樣的歷史原因。最初的Castle項目有兩個容器:提供所有基本功能和擴展點的MicroKernel(IKernel),以及提供附加功能(如XML配置,代理等)幷包裝MicroKernel的MicroKernel的包裝器Windsor IWindsorContainer

那些以後(在v2.5中)合併到一個單獨的項目/程序集中,但是爲了避免打破現有用戶的區別。

+0

感謝您的歷史。所以我會假設如果我說我正在使用溫莎,我真的不需要使用IKernal,除非我正在使用特別需要舊IKernel的東西? – CrazyDart

+0

IKernel是否自動註冊,但IWindsorContainer不是? –

+1

種。 'IKernel'可用作OOTB的依賴項,IWindsorContainer不是,因爲它是一個面向用戶的接口 –

相關問題