DIを管理するDIコンテナとDIコンテナについて少しお読みください。DIコンテナと具体的な値/構成データ
基本的に、依存関係のあるクラスを作成し、コンストラクタまたはセッタメソッドを使用して注入する方法を提供します。次に、DIコンテナに、どのような具象クラスを使用してすべてを配線するかを指示します。最後に、何らかのサービスロケータを呼び出します。これは、すべての依存関係を解決し、コードの1行だけで複雑なオブジェクトを提供します。
コンクリートDIコンテナの実装は一度も使用していないので、DIコンテナがどのように最下位レベルのオブジェクトを処理するのか不思議です。これらのオブジェクトは、コンクリート(コード化)値または構成ファイルの内容を使用して構成する必要があります。例えばこれを持っ:
class FooDao {
public FooDao(DBConnection db) {...}
}
class ConcreteDBConnection : DBConnection {
public ConcreteDBConnection(String url, int port, String user, String pw)
{...}
}
あなたはConcreteDBConnectionオブジェクトを使用してFooDaoオブジェクトをインスタンス化することを、(注釈、XMLファイル、または何か他のものを使用して)あなたのDIコンテナを言うだろう。しかし、データベース接続に必要な具体的な値をDIコンテナにどのように伝えていますか?具体的な値を最初に計算する必要がある場合(たとえば、ローカルに格納されたデータベース接続情報を暗号化するなど)
これは非常に一般的な質問ですが、私がDI容器について読んだ記事も非常に一般的であり、この点は本当に私を混乱させました。どのように任意の人気のDIフレームワークがこれを行うかについての簡単な説明は私の質問に答えるのに十分でしょう。
[Dependency-injection anti-pattern:コンポーネントへのランタイムデータの挿入](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=99&month=11&year=2015)と[なぜ我々は抽象的な工場のデザインパターンが必要ですか?](http://stackoverflow.com/q/2280170/181087) – NightOwl888