- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 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への移行]]
--[[.NET Core における DI]]
--[[ASP.NET Core]] > [[ASP.NET Coreへの移行]]
* 目次 [#c961339d]
#contents
*概要 [#rb685d9d]
ミドルウェア /サービス / フレームワークの~
差し替えを実現し、特定のフレームワークへの依存性を減らす。
[[参考>.NET Core における DI#pc1d5785]]
-明示的な依存関係の原則~
[[constructor注入>DI#pf220003]]のDI方式を採用している。
-[[依存性反転原則>IoC#ob8c9a64]]
--抽象化は依存関係をinterfaceに抽出することにより行われる。
--interface実装をパラメタとして提供するのも、戦略設計パターンの例。
*詳細 [#ec2347ad]
**インジェクションの構成 [#i8e6b534]
以下のように、インジェクションを構成できる。
**構成 [#i8e6b534]
[[参考>.NET Core における DI#qbc1fa8c]]
-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のクラス型)に書く。
-Viewインジェクション
--@inject [サービスの型] [変数名]
--Modelプロパティ風(@model ViewModelのクラス型)
>に書く。
-参考
--ビューへの依存関係の挿入 | Microsoft Docs~
https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/dependency-injection
**コンテナを変更する。 [#wf1daf74]
-ConfigureServices メソッドが、IServiceProvider を返すようにシグネチャを変更する。
-すると、[[Autofac>#vd7b0259]]など、別のコンテナを構成して返すことができる。
ASP.NET Coreでは、
-既定では、Microsoft.Extensions.DependencyInjectionを使用する。
-ConfigureServices メソッドが、IServiceProvider を返すようにシグネチャを変更する方法で、~
[[Autofac>#vd7b0259]] (Autofac.Extensions.DependencyInjection)など、別のコンテナに切替可能らしい。
*参考 [#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
-ASP.NET Core でのアプリケーションのスタートアップ~
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/startup
**DevIQ > Posts [#y7498077]
**Qiita [#t0d72606]
-.NET 系の DI コンテナ~
https://qiita.com/okazuki/items/239ca5ef46e5a085e085
***Principles [#nf97d12d]
-Inversion of Control~
http://deviq.com/inversion-of-control/
-DI (依存性注入) って何のためにするの~
かわからない人向けに頑張って説明してみる~
https://qiita.com/okazuki/items/a0f2fb0a63ca88340ff6
-Dependency Inversion Principle~
http://deviq.com/dependency-inversion-principle/
-DI って何でするのかわからない人向けに
頑張って説明してみる「本来の意味」~
https://qiita.com/okazuki/items/0c17a161a921847cd080
-Explicit Dependencies Principle~
http://deviq.com/explicit-dependencies-principle/
-DI コンテナは自分で new しないでフレームワークを探そう~
https://qiita.com/okazuki/items/6327d05fd84fd5de3299
***Patterns [#b04e13c8]
-Strategy Design Pattern~
http://deviq.com/strategy-design-pattern/
-DIコンテナのテスト以外での利点について (7/15修正)~
https://qiita.com/crexista/items/606976d941728a90b42b
-「DIコンテナのテスト以外での利点について」の自分の感想~
https://qiita.com/okazuki/items/a470e05c1a263921a59c
**時が癒す [#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
-Qiita
--Autofac について調べてみた
---その1 インスタンスのスコープ~
https://qiita.com/TsuyoshiUshio@github/items/f4d83c76520a86c028dc
---その2 インスタンスのスコープ補足~
https://qiita.com/TsuyoshiUshio@github/items/066e6feae4b4f7c1e0b8
---その3 WebApi とのインテグレーション~
https://qiita.com/TsuyoshiUshio@github/items/f4d83c76520a86c028dc
--ASP.NET Coreアプリの~
Dependency Injection処理を別のDIコンテナに委譲する(完全版)~
https://qiita.com/yamaokunousausa/items/bc81d8498ecf62da0208
--ASP.NET CoreでIServiceProviderに登録される情報を確認する~
https://qiita.com/yamaokunousausa/items/0d5450ff6b50ebe7129e
--ASP.NET Coreで設定ファイルによるDIの設定を行い~
環境によって使用されるコンポーネントを変更する~
https://qiita.com/yamaokunousausa/items/bd5ee2d0af79aa55923d
----
Tags: [[:プログラミング]], [[:.NET開発]], [[:.NET Core]], [[:ASP.NET]], [[:ASP.NET MVC]]