回答編集履歴
1
コンストラクタインジェクションの語を使った形に説明を修正
answer
CHANGED
@@ -11,13 +11,13 @@
|
|
11
11
|
|
12
12
|
(疑似コードのためお使いのDIコンテナでのメソッドで置き換えて考えてください)
|
13
13
|
|
14
|
-
そして、型を解決するときはIServiceではなく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がさらに別の
|
20
|
+
さらに、ここで例えばServiceがさらに別のクラスにコンストラクタ引数から依存していた場合でもDIコンテナに型を登録してあれば、あくまで`container.Resolve<LogicA>()`とするだけで生成処理が完了します。
|
21
21
|
|
22
22
|
|
23
23
|
このようにDIコンテナは複雑なクラスの生成処理を「事前の型の登録」によって自動化することが出来ます。
|