ASP.NET Coreノート(1)-Startupクラスについて
4432 ワード
ASP.NET Coreは一般的にStartupクラスを使用してアプリケーションの構成を行います.アプリケーションホストの構築時にStartupクラスを指定し、通常はホストジェネレータでWebHostBuilderExtensionsを呼び出す.UseStartupメソッドでは、Startupクラスを指定します.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
});
Startupクラスには、次の方法があります.
Startupコンストラクタ
3.1で汎用ホスト(IHostBuilder)を使用する場合、Startupコンストラクション関数には、IWebHostEnvironment、IHostEnvironment、IConfigurationの3種類のサービスしか注入できません.他のサービスを注入しようとすると、InvalidOperationException異常が放出されます.
System.InvalidOperationException: 'Unable to resolve service for type '***' while attempting to activate '_1_Startup.Startup'.'
ホストの起動時には、Startupコンストラクション関数->ConfigureServicesメソッド->Configureメソッドの順に実行されます.Startupコンストラクション関数の実行時にホストはこの3つのサービスのみを提供し、他のサービスはConfigureServicesメソッドに追加する必要があります.そしてConfigureメソッドが実行されると、より多くのサービスタイプを使用することができます.
ConfigureServicesメソッド
ホストはコンフィギュレーション・サービス・メソッドを呼び出し、必要なサービスをコンフィギュレーション・メソッドとアプリケーション全体で利用できるように、注入に依存してサービス・コンテナに追加します.
コンフィギュレーション・サービス・メソッドのパラメータには、IServiceCollection以外のサービスは入力できません.具体的には、IServiceCollectionの拡張方法でアプリケーションにさまざまな機能を構成できます.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity(
options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores();
services.AddRazorPages();
}
Configureメソッド
Configureメソッドは、アプリケーションがHTTPリクエストに応答する方法を指定するために使用されます.中間部品コンポーネントをIApplicationBuilderインスタンスに追加することで、要求パイプを構成できます.コンフィギュレーションメソッドパラメータのIApplicationBuilderは、サービスコンテナに登録する必要がなく、ホストによって作成され、コンフィギュレーションメソッドに直接渡されます.Configureメソッドは、一連のUse拡張メソッドから構成されています.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
各Use拡張子は、要求パイプにミドルウェアを追加します.要求パイプに構成されたミドルウェアは、その後の次のミドルウェアを呼び出すか、パイプを直接短絡します.
コンフィギュレーションメソッドパラメータでは,IWebHostEnvironment,ILoggerFactoryのようなサービス,あるいはコンフィギュレーションサービスメソッドでDIコンテナに追加されたサービスを自分のニーズに応じて注入することができる.
コンフィギュレーションWebHostDefaultsで直接サービスとリクエストパイプを構成する
ASP.NET Coreは、Startupクラスを使用せずにサービスと要求パイプを構成できる方法も提供しています.ConfigureWebHostDefaultsで提供されるConfigureServicesメソッドとConfigureメソッドをアップグレードすることもできます.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureServices((c, services) =>
{
services.AddControllers();
})
.Configure(app =>
{
var env = app.ApplicationServices.GetRequiredService();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
});
})