2011-07-22 18 views
13

IWindsorContainerではなく、IKernelを使用したコード例をいくつか見てきました。どうしてこれなの?ここでIWindsorContainerでIKernelを使用する理由

は一例です:私は私のコレクションを注入することができますsubresolver

Container.Kernel.Resolver.AddSubResolver(
     new CollectionResolver(Container.Kernel, true)); 

を追加しましたので、上記の例ではhttp://docs.castleproject.org/(S(kwaa14uzdj55gv55dzgf0vui))/Windsor.Windsor-tutorial-part-two-plugging-Windsor-in.ashx

は、それは私を噛まないようになりました...しかし、まだそれが働い波平。 IKernelが使われていたので、ウィンザーの全機能を使うことができなかったことが分かりました。なぜ誰かが完全なコンテナを介してカーネルを使用したいのですか?私はウィンザーを実装しようとしている場合は、完全なコンテナを使用すると思います。私が間違っている?どうして?

答えて

18

歴史的な理由があります。当初キャッスルプロジェクトには、基本機能と拡張ポイントをすべて提供するMicroKernel(IKernel)とMicroKernelを包み込むラッパーであったWindsor IWindsorContainer(XML設定、プロキシなど)があり、MicroKernelをラップしていました。

これらは後で(v2.5では)単一のプロジェクト/アセンブリに統合されましたが、既存のユーザーを壊さないために区別が維持されました。

+0

ありがとうございます。だから私はWindsorを使っていると言えば、IKernalを使用する必要はありません。古いIKernelが必要なものを使用しているのでなければ、私は前進していると思います。 – CrazyDart

+0

IKernelは自動的に登録されますが、IWindsorContainerは登録されていません。 –

+1

種類です。 'IKernel'は依存関係OOTBとして利用可能ですが、IWindsorContainerはユーザーが直面するインターフェイスなので、そうではありません –

関連する問題