- 2017/03/15(Wed) 時点の情報に基づいています
- 公式ドキュメント:Application Startup in ASP.NET Core
ASP.NET Core でのアプリケーションの起動
Startup
クラスは、アプリケーションに対して行われたすべてのリクエストを処理するリクエストパイプラインを構成します。
Startup クラス
ASP.NET Core アプリケーションには Startup
クラスが必要です。慣例として、Startup
クラスの名前は "Startup" です。Main
メソッド内で、WebHostBuilderExtensions クラスの
UseStartup<TStartup>
メソッドに Startup
クラス名を指定します。
異なる環境に応じて別々の Startup
クラスを定義することができ、実行時に適切なクラスが選択されます。
WebHost の構成またはオプションの中で startupAssembly
を指定すると、ホストはその起動アセンブリを読み込み、Startup
または Startup[Environment]
タイプを検索します。
StartupLoader
クラスの FindStartupType メソッドと Working with multiple environments を参照してください。 UseStartup<TStartup>
メソッドは推奨されるアプローチです。
Startup
クラスのコンストラクタに、dependency injection によってオブジェクトを注入することができます。例えば、IHostingEnvironment
を注入して構成ソースを設定したり、ILoggerFactory
を注入してlogging プロバイダーを設定することができます。
Startup
クラスには Configure
メソッドが必須で、オプションで ConfigureServices
メソッドを含めることができます。どちらもアプリケーションの起動時に呼び出されます。Startup
クラスはまた、これらのメソッドの環境固有バージョンを含めることもできます。
handling exceptions during application startup について学びましょう.
Configure メソッド
Configure
メソッドは、ASP.NET Core アプリケーションが HTTP リクエストにどのように応答するかを指定するために使用されます。リクエストパイプラインは、middleware コンポーネントを IApplicationBuilder
インスタンスに追加することによって構成されます。IApplicationBuilder
インスタンスは Dependency Injection によって注入されます。
以下のデフォルト Web サイトテンプレートのサンプルでは、いくつかの拡張メソッドを使用して、BrowserLink、error pages、 static files、 ASP.NET MVC、 および Identity をサポートするパイプラインを構成しています。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseIdentity();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
各 Use
拡張メソッドは、リクエストパイプラインに Middleware コンポーネントを追加します。例えば、UseMvc
拡張メソッドは Routing Middleware をリクエストパイプラインに追加し、MVC をデフォルトハンドラーとして構成します。
IApplicationBuilder
の使い方の詳細については、Middlewareを参照してください。
IHostingEnvironment
や ILoggerFactory
のような追加の Service もメソッドの引数に指定することができます。これらの Service が利用可能であれば注入 されます。
ConfigureServices メソッド
ConfigureServices メソッドはオプションですが、もし使用された場合は、実行時に Configure
メソッドの前に呼び出されます(一部の機能はリクエストパイプラインに組み込まれる前に追加されます)。 構成オプション はこのメソッドで設定されます。
実質的なセットアップが必要な機能のために、IServiceCollection には Add[Service]
拡張メソッドが用意されています。このデフォルト Web サイトテンプレートのサンプルでは、Entity Framework、Identity、および MVC の Service を使用するようにアプリケーションを構成しています。
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
IServiceCollection
に 追加された Service は、
Dependency Injection を介してアプリケーション内で利用できるようになります。
Startup クラスで利用可能な Service
ASP.NET Core の Dependency Injection はアプリケーションの起動時にアプリケーションサービスを提供します。これらのサービスを使用するには、Startup
クラスのコンストラクタまたは Configure
メソッドまたは ConfigureServices
メソッドの引数として適切なインターフェースを指定します。
Startup
クラスの各メソッドを呼び出し順に見てみましょう、それぞれ以下のサービスが引数で指定できます。
- コンストラクタ
IHostingEnvironment
ILoggerFactory
-
ConfigureServices
メソッド
IServiceCollection
-
Configure
メソッド
IApplicationBuilder
IHostingEnvironment
ILoggerFactory
IApplicationLifetime