サービスの有効期間
サービスを登録する際には、アプリ内でのサービスの使用方法にマッチした有効期間を選択する必要があります。 この有効期間は、サービスがコンポーネントに挿入されたときの動作に影響します。 ここまでは、AddSingleton
メソッドを使用してサービスを登録しました。 このメソッドは、シングルトンの有効期間でサービスを登録します。 ASP.NET Core のサービスには、以下の 3 つの組み込みの有効期間が存在します。
- シングルトン
- スコープ
- 一時的
シングルトンの有効期間
シングルトンの有効期間を使用して登録されたサービスは、アプリの起動時に 1 回作成され、アプリの有効期間中は再利用されます。 この有効期間は、作成にコストがかかるサービスや、あまり変化しないサービスに適しています。 たとえば、ファイルから構成設定を読み取るサービスをシングルトンとして登録することができます。
AddSingleton
メソッドを使用して、シングルトン サービスをサービス コンテナーに追加します。
スコープ付き有効期間
スコープ付き有効期間を使用して登録されたサービスは、構成されたスコープごとに 1 回作成され、これは ASP.NET Core によって要求ごとに設定されます。 ASP.NET Core のスコープ付きサービスは通常、要求が受信されたときに作成され、要求が完了したときに破棄されます。 この有効期間は、要求固有のデータにアクセスするサービスに適しています。 たとえば、データベースから顧客のデータをフェッチするサービスをスコープ付きサービスとして登録できます。
AddScoped
メソッドを使用して、スコープ付きサービスをサービス コンテナーに追加します。
一時的な有効期間
一時的な有効期間を使用して登録されたサービスは、サービスが要求されるたびに作成されます。 この有効期間は、軽量でステートレスなサービスに適しています。 たとえば、特殊な計算を実行するサービスを一時的なサービスとして登録することができます。
AddTransient
メソッドを使用して、一時的なサービスをサービス コンテナーに追加します。
他のサービスに依存するサービス
1 つのサービスはその他のサービスに依存している可能性があり、これは通常、コンストラクターを介して依存関係を挿入することで実現されています。 別のサービスに依存するサービスを登録する場合は、サービスの有効期間を考慮に入れる必要があります。 たとえば、スコープ付きサービスは要求が完了した時点で破棄されますが、シングルトンはアプリの有効期間中存在し続けるため、シングルトン サービスはスコープ付きサービスに依存するべきではありません。 さいわい、ASP.NET Core は、既定でこの構成の誤りをチェックし、アプリの起動時にスコープ検証エラーを報告するため、この問題をすばやく特定して対処することができます。