2011-10-27 2 views
5

バインディングから具体的な型を取得する方法はありますか?私は、実装をインスタンス化したくないだけで、型を取得します。ninjectからすべての具体的な型を取得する

私は私のKernelがちょうどStandardKernelあるこの

Type[] concreteTypes = Kernel.GetBindings(typeof(IController)). 
    GetImplementingTypes(); 

ような何かを行うたい。

私は最終的にそれらのタイプを反映したいと思います。

答えて

4

唯一の方法は、kernel.GetAll<IController>()を使用してすべてのインスタンスを取得することです。 Ninjectにはバインドマッピングが設定されていません。インプリメンテーションは、インスタンスがインジェクションまたはコールを介して解決されたときに決定されます。これは、Ninjectが条件付きバインディングと暗黙的バインディングを許可するためです。

MVC3アプリケーションを設定した場合、Ninjectがロードするコントローラとそのコントローラに何を注入するかを決定するため、実際にコントローラを登録しません。暗黙的なバインディングを遅延的に作成することでこれを行います。

最も近いのは、StandardKernelを拡張し、保護されたバインディングセットにアクセスし、条件付きでないすべてのバインディングを見つけることです。条件付きでないすべてのバインディングを取得したら、バインディングを分離することができるかもしれませんが、StandardProviderクラスの背後に隠れている可能性があります。

特定のインターフェイスの正確なバインディング設定を知っている必要がありますか?

+0

私はこれが永遠であることを認識していますが、これが必要な場所は1つだけです.NinjectにServiceインスタンスを作成させるために、NinjectベースのServiceHost for WCFを構築しています。私はServiceHostコンストラクタに、サービスインタフェースではなく具体的​​なサービス実装の型を与える必要があります。 –

関連する問題