9

現在、コア アセンブリと winforms アセンブリで構成される小さな C# アプリケーションを作成しています。このような小さなことでは、おそらく Ninject は必要ないかもしれませんが、試してみたいと思います。

とにかく、Ninject を使用するには、返されるクラスをマップする一連のモジュールを作成する必要があることを理解しました。その後、インスタンスを作成しIKernelてモジュールをロードします。

しかし、これらのモジュールはどこに保管すればよいのでしょうか? また、カーネルはどこに保管すればよいですか? 物はどこへ行く?

4

3 に答える 3

3

カーネルの静的ラッパークラスを作成できます。そうすれば、ServiceLocator.Resolve()のようなことができます。

サービスを登録するには、インライン登録とモジュール登録の2つの方法があります。それらの両方は、ブートストラップ時にロードする必要があります。モジュールは整理に適しています。

静的クラスがあり、自動マッピング機能があるため、StructureMapから始める方が簡単かもしれません。

これらのスクリーンキャストで始めることができます。

于 2009-11-04T19:49:51.200 に答える
3

+1'd Marek's answer - これらのリソースを必ず確認してください。

いくつかの点...

小さなアプリであっても、これを試すのは間違いありません。あなたが提起したような表面的には単純な質問についても、真剣に考えることが重要です. DIの場合、実際にそれを評価するには、実際にいくつかの作業を行う必要があります-私は、実際に使用するまで、「ああ、私は小さなアプリしか持っていません」(否定)キャンプに長い間いました.

ただし、一般的に Service Locator から離れて、[コンテナーへの依存なしに] インジェクションのみを使用する必要があるという学校があります。

Service Locators を使用しない場合、コンテナ (カーネル) がどこにあるかを知る必要はありません。これが最善の方法です。

モジュールは主に、特定の全体的なコンテナー (カーネル) に登録するバッチの区分化を目的としています。

確かに、Ninject用の正規の「グローバルコンテナ」シングルトン実装がありますか? 編集: 1 つだけ見つかりました:- http://www.codethinked.com/creating-a-binding-factory-for-ninject

Ninject: クラス ライブラリに注入するにはどうすればよいですか?も参照してください。

于 2009-11-05T16:17:08.750 に答える
0

私の見解: Marek が言ったように、IKernel インスタンスを含むカーネル用の (おそらく静的な) ラッパーを作成する必要があります。Resolve< T> メソッドと、おそらく Load(INinjectModule module) メソッド (すべて静的) を含める必要があります。

各アセンブリでは、このアセンブリ内のクラスをマップする独自のINinjectModuleを簡単に定義できます。

カーネル ラッパーは、最も一般的なアセンブリ (通常、Log と Utils があるアセンブリ) である「最下位」にあります。これは、カーネルがすべてのパーツからアクセスできる必要があるためです。つまり、他のすべてのパーツから参照されるアセンブリ内にある必要があります。持っていない場合は、いつでも自由に作成できます。これは少しトリッキーに思えるかもしれませんが、カーネルが「最上位」のアセンブリ (実行可能アセンブリ) にあることが予想されます。違います。

アセンブリからすべてのモジュールを登録するには、それぞれのモジュールで Kernel.Load(new XXModule) を呼び出すだけです。

于 2010-12-30T04:15:32.877 に答える