あなたの前提はここでは少し混乱していると思います、あなたはファクトリを注入することについて話しますが、ファクトリパターンは、DIフレームワークが普及していないときに依存性注入フレームワークが行うことのサブセットを行うことを目的とした創造的なパターンですそのため便利です。ただし、DIフレームワークがある場合、DIフレームワークはファクトリが満たすはずの目的を果たすことができるため、実際にはファクトリは必要ありません。
そうは言っても、依存関係の注入と、一般的な使用方法について少し説明しましょう。
依存性注入を行うにはさまざまな方法がありますが、最も一般的なのはコンストラクター注入、プロパティ注入、および直接DIContainerです。プロパティインジェクションはほとんどの場合間違ったアプローチであるため(時々正しいアプローチです)、コンストラクターインジェクションについてお話します。DIContainerアクセスは、他のアプローチのいずれかを絶対に行えない場合を除いて好ましくありません。
コンストラクターインジェクションは、依存関係のインターフェイスと、その依存関係の具体的な実装を知っているDIContainer(またはファクトリー)があり、そのインターフェイスに依存するオブジェクトが必要な場合は、構築時にファクトリーから実装を渡します。それ。
すなわち
IDbConnectionProvider connProvider = DIContainer.Get<IDbConnectionProvider>();
IUserRepository userRepo = new UserRepository(connProvider);
User currentUser = userRepo.GetCurrentUser();
多くのDIフレームワークは、DIContainerがUserRepositoryのコンストラクターで具体的な実装を知っているインターフェイスを検査し、それらを自動的に渡す場所まで、これを大幅に簡素化できます。この手法は頻繁にInversion of Controlと呼ばれますが、DIとIoCはどちらも頻繁に交換される用語であり、あいまいな(ある場合)違いがあります。
ここで、包括的なコードがDIContainerにアクセスする方法を知りたい場合は、アクセスするための静的クラスを使用するか、ほとんどのDIフレームワークでDIContainerを更新することができます。指定されたインターフェースに対して具体的であるとわかっている型の内部シングルトン辞書へのラッパー。
つまり、コード内の任意の場所でDIContainerを更新し、インターフェイスとコンクリートの関係を知るために既に設定したものと同じDIContainerを効果的に取得できます。DIContainerを直接操作してはならないコードの部分からDIContainerを隠す通常の方法は、必要なプロジェクトにのみDIフレームワークへの参照があるようにすることです。