「[[マイクロソフト系技術情報 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] 「[[IoC]]」や「[[AOP]]」、「[[依存性反転原則]]」自体にも言えるが、~ 同時に全体として協調動作させるときに複雑さが増す。 **実現方法 [#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開発]]