オブジェクト指向プログラミングでは、オブジェクトはしばしば、他のオブジェクトに依存して動作する。
依存性注入 ( Dependency Injection 、DI)は、依存するものをオブジェクトに与えているので、それ自体を得ることを心配する必要はありません。つまり、依存関係がオブジェクトに注入されます。これは、 コンストラクタインジェクションまたはプロパティインジェクションで最もよく行われます 。
依存性注入は、 Inversion of Control (IoC)の一形態です。 IoCは、ソフトウェア設計のパターンを記述する広義語です。
伝統的な手続き型プログラミングでは、制御の流れは論理的に段階的に続く。コントロールは、操作を実行するオブジェクトまたは関数の手に委ねられています。ステップバイステップで、プログラムは明示的に制御する一連の操作を実行します。
すべてのステップを詳述しているオブジェクトや関数の代わりに、より包括的で抽象的なオブジェクト(通常はより広い範囲のフレームワーク)で操作を実行させることで、制御の流れを逆転させることができます。
ここには、独自の依存関係(食べ物)を作り出すクラス(犬)があります:
class Dog {
public Dog() {
var food = new Food();
this.eat(food);
}
}
コンストラクタインジェクションを使用して同じクラスに依存性が注入されています:
class Dog {
public Dog(Food food) {
this.eat(food);
}
}