「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[DI]] --[[ASP.NET Core]] ---[[ASP.NET Coreへの移行]] * 目次 [#c961339d] #contents *概要 [#rb685d9d] ミドルウェア /サービス / フレームワークの~ 差し替えを実現し、特定のフレームワークへの依存性を減らす。 -明示的な依存関係の原則~ [[constructor注入>DI#pf220003]]のDI方式を採用している。 -[[依存性反転原則>IoC#ob8c9a64]] --抽象化は依存関係をinterfaceに抽出することにより行われる。 --interface実装をパラメタとして提供するのも、戦略設計パターンの例。 *詳細 [#ec2347ad] **インジェクションの構成 [#i8e6b534] 以下のように、インジェクションを構成できる。 -Public constructor --1つのPublic constructor(複数のPublic constructorは例外) --依存関係の挿入によって提供されない引数は、既定値のサポートが必要。 -抽象化は依存関係をinterfaceに抽出 ※ 詳しくは[[コチラ>#jec03fd1]]を参照。 **対象 [#zecaeea3] ***[[Startup>ASP.NET Coreへの移行#g42f0f08]] [#xa0350c3] -ConfigureServicesメソッドでの登録メソッドによりライフサイクルが変わってくる。 --AddSigleton : アプリケーションにて共有のシングルトンインスタンスを作成する。 --AddScoped : Webリクエストごとに新しいインスタンスを作成する。 --AddTransient : Dependencyが要求されるごとに新しいインスタンスを作成する。 -Configureメソッドには、ConfigureServicesメソッドで登録したサービスが、~ IApplicationBuilderや引数を経由で渡されるので、これを使用して構成する。 ***Controller [#q1ed58f9] -Constructorインジェクション~ MVCのControllerは、constructorを使用しサービスを挿入する。 -Actionインジェクション~ Action methodのパラメタとしてサービスを挿入することもできる。 -参考 --コントローラーへの依存関係の挿入~ https://docs.microsoft.com/ja-jp/aspnet/core/mvc/controllers/dependency-injection ***View [#h7d59b85] -Viewインジェクション~ @inject [サービスの型] [変数名]と、Modelプロパティ風(@model ViewModelのクラス型)に書く。 -参考 --ビューへの依存関係の挿入 | Microsoft Docs~ https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/dependency-injection **コンテナを変更する。 [#wf1daf74] -ConfigureServices メソッドが、IServiceProvider を返すようにシグネチャを変更する。 -すると、[[Autofac>#vd7b0259]]など、別のコンテナを構成して返すことができる。 *参考 [#f9f43786] **Microsoft Docs [#f49f72b7] -ASP.NET Core での依存関係の挿入~ https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection -コントローラーへの依存関係の挿入~ https://docs.microsoft.com/ja-jp/aspnet/core/mvc/controllers/dependency-injection -ビューへの依存関係の挿入~ https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/dependency-injection **DevIQ > Posts [#y7498077] ***Principles [#nf97d12d] -Inversion of Control~ http://deviq.com/inversion-of-control/ -Dependency Inversion Principle~ http://deviq.com/dependency-inversion-principle/ -Explicit Dependencies Principle~ http://deviq.com/explicit-dependencies-principle/ ***Patterns [#b04e13c8] -Strategy Design Pattern~ http://deviq.com/strategy-design-pattern/ **時が癒す [#jec03fd1] ASP.NET Core MVC のDIコンテナを利用する -Part.0(準備編)~ http://mrgchr.hatenablog.com/entry/2016/10/21/000000 -Part.1~ http://mrgchr.hatenablog.com/entry/2016/10/22/000000 -Part.2~ http://mrgchr.hatenablog.com/entry/2016/10/23/000000 **Autofac [#vd7b0259] -Autofac について調べてみた その1 インスタンスのスコープ - Qiita~ https://qiita.com/TsuyoshiUshio@github/items/f4d83c76520a86c028dc -AutofacというDIコンテナを触ってみた - かずきのBlog@hatena~ http://blog.okazuki.jp/entry/2014/02/26/232829 ---- Tags: [[:プログラミング]], [[:.NET開発]], [[:.NET Core]], [[:ASP.NET]], [[:ASP.NET MVC]]