2

そこで私はこの新しいプロジェクトを開始し、私が読んでいたすべての新しい設計原則を取り入れようとしました。つまり、物事をゆるく結合し、テスト可能にし、いくつかのパターンに従うようにしました。

そのため、クラスコンストラクターに多くのファクトリ/マネージャーを渡さなければならないという問題に遭遇しました。これにより、依存関係の注入が発生しました。

public class SomeClass
{
   public SomeClass(IDBFactory factory, IOrderManager orderManager, ....)
}

したがって、私がninjectを使用する場合、私が理解していることから、特定の実装をクラスにバインドします。

では、舞台裏で何が起こっているのでしょうか?

NInjectは、SomeClassをインスタンス化するたびに、構成ファイルで定義した実装をバインドしますか?

すなわち

そうです:

ISomeClass sc = NInject.Get<ISomeClass>();

そしてninjectはします:

new SomeClassImpl(pass in all the implementaitons in the constructor)

正しい?

4

1 に答える 1

4

NInjectはわかりませんが、ほとんどのDIコンテナは自動配線をサポートしています。これは次のように機能します。

  1. ISomeClassをリクエストすると、登録されているすべてのタイプのリストが調べられます。このリストを使用して、ISomClassの目的の実装がSomeClassであることを検出します。
  2. SomeClassのコンストラクターを使用して(おそらくActivator.CreateInstanceを使用して)インスタンスを作成するため、Reflectionを使用して必要なパラメーターを特定します。
  3. 各パラメータについて、タイプを確認し、それぞれについて手順1〜2を繰り返します。

したがって、プロセスは再帰的である可能性がありますが、最終的には、すべての依存関係が満たされる完全に入力されたオブジェクトグラフになります。

于 2009-12-21T13:06:20.490 に答える