はじめに
IHostBuilder
には、ConfigureWebHost
とConfigureWebHostDefaults
の2つの拡張メソッドがあります。
違いを探ってみます。
バージョンは .NET 6.0.0 preview 7 です。
ConfigureWebHost
ソース です。
主たるところを引用します。
public static IHostBuilder ConfigureWebHost(
this IHostBuilder builder,
Action<IWebHostBuilder> configure,
Action<WebHostBuilderOptions> configureWebHostBuilder)
{
var webHostBuilderOptions = new WebHostBuilderOptions();
configureWebHostBuilder(webHostBuilderOptions);
var webhostBuilder = new GenericWebHostBuilder(builder, webHostBuilderOptions);
configure(webhostBuilder);
builder.ConfigureServices((context, services) =>
services.AddHostedService<GenericWebHostService>());
return builder;
}
GenericWebHostBuilder
のインスタンスを生成して、引数となっているラムダ関数を呼んでいます。
ConfigureWebHostDefaults
ソースです。
主たるところを引用します。
public static IHostBuilder ConfigureWebHostDefaults(this IHostBuilder builder, Action<IWebHostBuilder> configure)
{
return builder.ConfigureWebHost(webHostBuilder =>
{
WebHost.ConfigureWebDefaults(webHostBuilder);
configure(webHostBuilder);
});
}
ConfigureWebHost
を呼び出したあと、WebHost#ConfigureWebDefatuls
を追加で呼んでいます。
WebHost#ConfigureWebDefatuls
ソース です。
ちょっと長いです。
こんなメソッドたちを呼んでいます。
builder.ConfigureAppConfiguration(/* snip */);
builder.UseKestrel(/* snip */);
builder.ConfigureServices(/* snip */);
builder.UseIIS();
builder.UseIISIntegration();
使うかどうかわからないですが、いろいろ使えるようにしてくれています。
ConfigureServicesの中でやっていること
さらにConfigureServicesの中でやっていることも見てみます。
services.PostConfigure<HostFilteringOptions>(/* snip */);
services.AddSingleton<IOptionsChangeTokenSource<HostFilteringOptions>>(/* snip */);
services.AddTransient<IStartupFilter, HostFilteringStartupFilter>();
services.Configure<ForwardedHeadersOptions>(/* snip */);
services.AddTransient<IStartupFilter, ForwardedHeadersStartupFilter>();
services.AddRouting();
何かいろいろ必要そうなものを足しています。
わかったこと
IHostBuilder.ConfigureWebHostDefaults は、IHostBuilder.ConfigureWebHost +α ということがわかりました。
だいたい ConfigureWebHostDefaults で大丈夫そうですが、自前でやりたいときは ConfigureWebHost を使えばよさそうです。