「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[IoC]] --[[AOP]] * 目次 [#yfe8b965] #contents *概要 [#kcff7f34] **DI [#g0f585b6] -DI: Dependency Injection -依存性の注入 **DIとは? [#i845c8a5] [[依存性>#e6b1e28b]]を無くすために、動的に動作を[[注入>#m5bae250]]する。 ***依存性 [#e6b1e28b] -あるクラスに、固定の定数、変数、インスタンスが入っている状態 -つまりそのクラスは、その定数、変数、インスタンスに依存している。 ***注入 [#m5bae250] -そのクラスの外から定数、変数、インスタンスを設定する。 -これにより、動的に動作を変えられるようにする。 ***ユースケース [#t8611952] -「[[IoC]]」, 「[[AOP]]」を実現する技術の一つ。~ しかし、「[[依存性>#e6b1e28b]]とはコアで、[[アスペクト>AOP]]とはコアではない。」と言う意見もある。 -モックの差し替えなどを実現し、テストを容易にする。 -フレームワークの差し替えを実現し、特定のフレームワークへの依存性を減らす。 **問題点 [#xc8aa161] 「[[IoC]]」や「[[AOP]]」自体にも言えることになるが、~ 同時に全体として協調動作させるときに複雑さが増す。 **.NETにおけるDI [#r01c8a11] - Spring .NETによりサポートされていた模様。 -[[ASP.NET Core によって DI がサポートされるようになった>ASP.NET Core における DI]]。 *詳細 [#v2c96ec6] **DIの種類 [#pdd79724] プログラムに依存性を注入する方法としては、以下のような手法が存在する。 ***interface注入 [#k505f870] 注入用のinterfaceを定義して注入を行う方法 ***setter 注入 [#wed7c280] setter メソッドを定義して注入を行う方法 ***constructor注入 [#pf220003] constructorを定義して注入を行う方法 **コンテナー [#ed773e54] -依存関係を作成する専用のクラス。 --要求された依存関係をインスタンスの作成で行う。 ---依存関係はハードコーディングではなく、構成により宣言。 ---依存関係のある型のインスタンスを提供するファクトリ。 --依存関係だけでなく、ライフサイクルも管理する。 -以下のように呼ばれる。 --制御の反転 ([[IoC]]) コンテナー --依存関係の挿入 ([[DI]]) コンテナー *参考 [#o0eed8a3] -DI(依存性注入)について~ https://www.slideshare.net/yuiito94/di-56742600 **Qiita [#bb3ab861] -猿でも分かる! Dependency Injection: 依存性の注入~ https://qiita.com/hshimo/items/1136087e1c6e5c5b0d9f -「なぜDI(依存性注入)が必要なのか?」~ についてGoogleが解説しているページを翻訳した~ https://qiita.com/mizunowanko/items/53eed059fc044c5aa5dc ---- Tags: [[:プログラミング]], [[:.NET開発]]