teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コンストラクタインジェクションの語を使った形に説明を修正

2021/01/27 10:29

投稿

tor4kichi
tor4kichi

スコア773

answer CHANGED
@@ -11,13 +11,13 @@
11
11
 
12
12
  (疑似コードのためお使いのDIコンテナでのメソッドで置き換えて考えてください)
13
13
 
14
- そして、型を解決するときはIServiceではなくLogicAを解決ます。DIコンテナが内部的に登録された型のマップを使ってLogicAのコンストラクタ引数に解決済みの型与えてコンストラクタが処理されLogicAのインスタンスが生成されます。
14
+ そして、型を解決するときはIServiceを解決して手動`new LogicA(service)`するのではなくLogicAをDIコンテナで直接解決させます。DIコンテナが内部的に登録された型のマップを使ってLogicAのコンストラクタインジェクション実行し、LogicAがコンストラクタ引数で必要とする型解決された状態でLogicAのインスタンスが生成されます。
15
15
 
16
16
  ```
17
17
  var logicA = container.Resolve<LogicA>();
18
18
  ```
19
19
 
20
- ここで例えばServiceがさらに別の何かにコンストラクタ引数から依存していた場合でもDIコンテナに型を登録してあれば、あくまで`container.Resolve<LogicA>()`とするだけで生成処理が完了します。
20
+ さらに、ここで例えばServiceがさらに別のクラスにコンストラクタ引数から依存していた場合でもDIコンテナに型を登録してあれば、あくまで`container.Resolve<LogicA>()`とするだけで生成処理が完了します。
21
21
 
22
22
 
23
23
  このようにDIコンテナは複雑なクラスの生成処理を「事前の型の登録」によって自動化することが出来ます。