- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>IoC、AOP → DI → 依存性反転原則]]
--[[IoC]]
--[[AOP]]
* 目次 [#yfe8b965]
#contents
*概要 [#kcff7f34]
**DI [#g0f585b6]
DI: Dependency Injection(依存性の注入)
-Dependency InjectionのDependencyは依存性と訳すと誤解を生む。
-正確には「使われるオブジェクト」(依存オブジェクト)という意味。
**DIとは? [#i845c8a5]
[[依存性>#e6b1e28b]]を無くすために、動的に動作を[[注入>#m5bae250]]する。
***依存性 [#e6b1e28b]
-あるクラスに、固定の定数、変数、インスタンスが入っている状態
-つまりそのクラスは、その定数、変数、インスタンスに依存している。
***注入 [#m5bae250]
-そのクラスの外から定数、変数、インスタンスを設定する。
-これにより、動的に動作を変えられるようにする。
**ユースケース [#t8611952]
※「[[依存性>#e6b1e28b]]がコアの懸念で、[[AOPのアスペクト>AOP]]とはコアの懸念ではない。」と言う意見もある。
***「[[IoC]]」, 「[[AOP]]」の実現 [#be2b0e90]
「[[IoC]]」, 「[[AOP]]」を実現する技術の一つ。
***「[[依存性反転原則]]」の実現 [#x104b569]
[[依存性反転原則]]を実現する技術の一つ。
-モックの差し替え~
モックの差し替えなどを実現し、テストを容易にする。
-フレームワークの差し替え~
フレームワークの差し替えを実現し、特定のフレームワークへの依存性を減らす。
***テストでの利用 [#q0124c15]
モック差し替え。
***フレームワーク自身の利用 [#k1f914e9]
Session、認証、ASP.NET Identityのconfig等をProgram.csとか、Setup.csに書かせるアレ。
*詳細 [#v2c96ec6]
**DIの種類 [#pdd79724]
プログラムに依存性を注入する方法としては、以下のような手法が存在する。
***interface注入 [#k505f870]
注入用のinterfaceを定義して注入を行う方法
***setter 注入 [#wed7c280]
setter メソッドを定義して注入を行う方法
***constructor注入 [#pf220003]
constructorを定義して注入を行う方法
**コンテナー [#ed773e54]
-依存関係を作成する専用のクラス。
--要求された依存関係をインスタンスの作成で行う。
---依存関係はハードコーディングではなく、構成により宣言。
---依存関係のある型のインスタンスを提供するファクトリ。
--依存関係だけでなく、ライフサイクルも管理する。
-以下のように呼ばれる。
--制御の反転 ([[IoC]]) コンテナー
--依存関係の挿入 ([[DI]]) コンテナー
*その他 [#w56ca3fe]
**問題点 [#xc8aa161]
***複雑さが増す。 [#ue9bd465]
「[[IoC]]」や「[[AOP]]」、「[[依存性反転原則]]」自体にも言えるが、~
同時に全体として協調動作させるときに複雑さが増す。
***共通I/Fが無い場合。 [#s4b6d372]
-共通I/Fが無いDI場合のDIはユーザのレイヤでしか利用できない。~
(ユーザがDIしたものなので、ユーザが型情報を知っている)
-下位レイヤで利用するには、≒ 共通I/Fが必要。~
(ユーザがDIしたものなので、下位レイヤは型情報を知らない)
**実現方法 [#e830c78f]
***.NETにおけるDI [#r01c8a11]
- Spring .NETによりサポートされていた模様。
-[[ASP.NET Core によって DI がサポートされるようになった>ASP.NET Core における DI]]。
*参考 [#o0eed8a3]
-DI(依存性注入)について~
https://www.slideshare.net/yuiito94/di-56742600
-依存性の注入 - Wikipedia~
https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5
**Qiita [#bb3ab861]
-猿でも分かる! Dependency Injection: 依存性の注入~
https://qiita.com/hshimo/items/1136087e1c6e5c5b0d9f
-「なぜDI(依存性注入)が必要なのか?」~
についてGoogleが解説しているページを翻訳した~
https://qiita.com/mizunowanko/items/53eed059fc044c5aa5dc
-DI(Dependency Injection) の解説~
https://qiita.com/okadabasso/items/066efc2e728a666b8732
-Dependency Injection: 依存性の注入 のお役立ち例~
https://qiita.com/saeki4n/items/22a276dcac9ef537ee25
**[[ASP.NET Core における DI]] [#dea1500b]
----
Tags: [[:プログラミング]], [[:.NET開発]]