1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[.NET] IHostBuilder.ConfigureWebHost と IHostBuilder.ConfigureWebHostDefaults の違い

Posted at

はじめに

IHostBuilderには、ConfigureWebHostConfigureWebHostDefaultsの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 を使えばよさそうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?