ASP.NETコア学習--6

依存性注入DI

ASP.NETコアは、設計支援と依存性注入の基礎となります。ASP.NETコアアプリケーションフレームワークサービスは、クラスにそれらを注入開始する内部メソッドを使用して、アプリケーション・サービスは、注射を配置することができます。

1.依存性注入とは何ですか

オブジェクトとその共同研究者または技術依存アイテム間の疎結合を達成するために、依存性注入(依存性注入、DI)。それらの操作を実行するクラス(アクション)がなく、直接インスタンス化パートナーまたは静的参照よりも、何らかの方法でオブジェクトのクラスに供給されます。通常、このクラスは、彼らが(明示的な依存関係の原則)に依存することが示さ原則に従うことができるように、彼らのコンストラクタで依存関係を宣言します。この方法は、「コンストラクタ・インジェクション(コンストラクタ・インジェクション)」と呼ばれています。

クラスは、DIを使用するように設計されているときにハードコードされたそれらの共同編集者に直接依存しないので、緩いそのカップリング、思いました。これは、と述べている「依存性逆転原理(依存反転原理)」、以下「高レベルモジュールは、低レベルのモジュールに依存してはならないが、両方が抽象に依存すべきです。」

システムは、クラスが人これらのクラス及びその関連の依存関係を作成するために使用された場合、依存関係の多くの種類、それらのコンストラクタ(またはプロパティ)を介して、要求、DIを使用するときに設計されています。これらのクラスは、「容器(コンテナ)」と呼ばれる、またはより具体的には、「制御の反転(制御の反転、IOC)コンテナ」またはと呼ばれる「容器の依存性注入(依存性注入、DI)。」コンテナは、本質的に植物であるが、それはタイプの要求されたインスタンスを提供する責任があります。

コアASP.NETシンプル内蔵容器は、(IServiceProviderインタフェースによって表される)デフォルトコンストラクタ注入サポートを含み、その結果、DIを介して利用可能なASP.NET特定のサービス。

が提供するフレームワークを使用してサービス2、

アプリケーションサービスを定義するための責任ConfigureServices方法のスタートアップクラスは、Entity FrameworkのコアとASP.NET MVC中核としてプラットフォーム機能を含め、使用されます。

公共のボイドConfigureServices(IServiceCollectionサービス)
{
services.Configure <CookiePolicyOptions>(オプション=>
{
//このラムダは非本質的なクッキーのためのユーザーの同意が与えられた要求のために必要とされているかどうかを決定する。
options.CheckConsentNeededコンテキスト=>真=;
オプションを。 MinimumSameSitePolicy = SameSiteMode.None;
});


services.AddMvc()SetCompatibilityVersion(CompatibilityVersion.Version_2_1)。
}

3、あなたのサービスを登録します

あなたはそれらのアプリケーションサービスを登録するには、次の方法をインストールすることができます。第一のタイプは、コンテナ(通常インターフェイス)から、一般的なタイプの要求を表します。コンテナによって表される第2のジェネリック型と完全にこれらの要求のインスタンスの特定の種類:

services.AddTransient <IEmailSender、AuthMessageSender>();
services.AddTransient <ISmsSender、AuthMessageSender>();


4、ライフサイクルおよびサービスの登録オプション

ASP.NETサービスは、以下のライフサイクルのために設定することができます:
一時瞬時
過渡(トランジェント)ライフサイクルサービスは、彼らが要求するたびに作成されます。軽量、ステートレスサービスのライフサイクル。

スコープスコープ
範囲(スコープ)ライフサイクルサービスは、すべてのリクエストで一度作成されます。

シングルトンシングルトン
シングルトン(シングルトン)ライフサイクル彼らが最初に要求されたときに作成されたサービス(または実行時のConfigureServicesインスタンスを指定した場合)、および各後続の要求は、同じインスタンスを使用します。

5、サービスを要求

ASP.NETのHttpContextからの要求は、利用可能なサービスが開示RequestServicesによって設定されています。
サービスは、サービス要求を設定するには、あなたを要求し、アプリケーションの一部として説明します。
典型的には、これらの特性を直接使用されるべきではなく、要求クラスのコンストラクタによって必要とされるクラス、などのタイプは、フレーム依存性を注入します。

6、あなたの依存性注入サービスを設計

あなたは、彼らの協力者を得るためにあなたの依存性注入のサービスを設計する必要があります。これは、呼び出しを避ける、あなたのサービスを意味します(コードが静的しがみつくと呼ばれている)とタイプは、静的メソッドのステートフルの使用に直接依存してインスタンス化。

7、Autofacを使用すると、デフォルトのコンテナサービスを置き換えます

内蔵のサービスコンテナの意図は、基本的なニーズのフレームワークを提供し、その上に構築されたほとんどの顧客アプリケーションを負かす事です。しかし、開発者は簡単にデフォルトのコンテナを交換するために好みの容器を使用することができます。ConfigureServices方法は、典型的には、voidを返していますが、署名を変更した場合IServiceProviderを返し、別のコンテナを返すように構成することができます。

おすすめ

転載: www.cnblogs.com/ahao214/p/11404254.html