前回までのあらすじ
DIコンテナを
使ったよ
オブジェクトライフサイクルについて
前回AddTransientを利用した例では、Dependencyが要求されるごとに新しいインスタンスが生成されていました。
これらのオブジェクトのライフサイクルは、ConfigureServicesにてどのような登録メソッドを利用するかによって決まります。
メソッド名 | 説明 |
---|---|
AddTransient | Dependencyが要求されるごとに新しいインスタンスを作成する |
AddScoped | Webリクエストごとに新しいインスタンスを作成する |
AddSigleton | アプリケーションにて共有のシングルトンインスタンスを作成する |
AddTransient
AddScoped メソッドは、DIコンテナにTransientライフサイクルにてオブジェクトを登録します。
Transientライフサイクルでは、Dependencyが要求されるごとに新しいDependencyインスタンスが生成されます。
画像は前回のものですが、Dependencyを受け取る箇所毎にインスタンスが生成されています。
AddScoped
AddScoped メソッドは、DIコンテナにScopedライフサイクルにてオブジェクトを登録します。
Scopedライフサイクルでは、HTTPリクエスト毎にDependencyインスタンスを一つ生成します。
リクエストの間はそのインスタンスが共有されます。
次の画像ではHTTPリクエスト毎に新しいインスタンスが生成されていて、リクエスト間では一つのインスタンスが共有されています。
AddSingleton
AddSingletonメソッドは、DIコンテナにSingletonライフサイクルにてオブジェクトを登録します。
Singletonライフサイクルでは、Dependencyインスタンスを一つ生成し、そのインスタンスをアプリケーションで共有します。
次の画像ではそれぞれのHTTPリクエストにおいても、一つのインスタンスが共有されています。
サンプルアプリでのサービスとライフタイム
ASP.NET Core MVC のサンプルアプリ初期状態にて、ConfigureService呼び出し時に登録されているサービスとそのライフサイクルを調べて最初の10件をリストにしました。
これを見るとSingletonとTransientが多いですね。
Lifetime | ServiceType | ImplementationInstance | ImplementationType |
---|---|---|---|
Singleton | Microsoft.AspNetCore.Hosting.IHostingEnvironment | Microsoft.AspNetCore.Hosting.Internal.HostingEnvironment | |
Singleton | Microsoft.Extensions.Logging.ILoggerFactory | Microsoft.Extensions.Logging.LoggerFactory | |
Singleton | Microsoft.Extensions.Logging.ILogger`1[TCategoryName] | Microsoft.Extensions.Logging.Logger`1[T] | |
Transient | Microsoft.AspNetCore.Hosting.Builder.IApplicationBuilderFactory | Microsoft.AspNetCore.Hosting.Builder.ApplicationBuilderFactory | |
Transient | Microsoft.AspNetCore.Http.IHttpContextFactory | Microsoft.AspNetCore.Http.HttpContextFactory | |
Singleton | Microsoft.Extensions.Options.IOptions`1[TOptions] | Microsoft.Extensions.Options.OptionsManager`1[TOptions] | |
Singleton | System.Diagnostics.DiagnosticSource | Microsoft.AspNetCore | |
Singleton | System.Diagnostics.DiagnosticListener | Microsoft.AspNetCore | |
Transient | Microsoft.AspNetCore.Hosting.IStartupFilter | Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter | |
Singleton | Microsoft.Extensions.ObjectPool.ObjectPoolProvider | Microsoft.Extensions.ObjectPool.DefaultObjectPoolProvider |
まとめ
DIコンテナのライフサイクルと、サンプルの初期の登録されているサービスを調べました。