アプリケーション ホストを初期化する前に、アプリケーションの構成からいくつかの設定を読み取って、他のいくつかの設定を行う必要があります。
ASP .NET Core 2.x では、アプリケーション ホストを初期化する前に設定を読み取るために、次の操作を行っていました。
public static void Main(string[] args)
{
//...
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddCommandLine(args)
.AddJsonFile("appsettings.json")
.Build();
//Do something useful with the configuration...
var host = WebHost.CreateDefaultBuilder()
.UseStartup<Startup>()
.UseConfiguration(configuration)
.Build();
//...
}
ASP .NET Core 3.xの場合WebHost
.NET Generic Host に代えて廃止されました。.NET
Generic Host には、ビルドされた構成をパラメーターとして受け取らず、代わりに構成のセットアップに使用されるデリゲートのみを受け入れる と.ConfigureHostConfiguration()
のみがあります。.ConfigureAppConfiguration()
.UseConfiguration()
HTTP ワークロードの場合は、公開されているメソッドを引き続き使用してIWebHostBuilder
、基本的に以前と同じ操作を実行できます。
public static void Main(string[] args)
{
//...
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddCommandLine(args)
.AddJsonFile("appsettings.json")
.Build();
//Do something useful with the configuration...
var host = Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseConfiguration(configuration);
})
.Build();
//...
}
しかし、これはHTTPワークロードにのみ有効であり、労働者サービス。
ホストをセットアップする前に構成を取得するために、次のアプローチを思いつきました。
public static void Main(string[] args)
{
//...
var configuration = ConfigureConfigurationBuilder(args)
.Build();
//Do something useful with the configuration...
var host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder => ConfigureConfigurationBuilder(args, builder))
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build();
//...
}
public static IConfigurationBuilder ConfigureConfigurationBuilder(string[] args, IConfigurationBuilder configurationBuilder = null)
{
configurationBuilder ??= new ConfigurationBuilder();
configurationBuilder
.AddEnvironmentVariables()
.AddCommandLine(args)
.AddJsonFile("appsettings.json");
return configurationBuilder;
}
基本的に、 を設定してそれを返すメソッドを記述してConfigurationBuilder
、同じ構成を再利用できるようにしました。これは実際には機能しますが、同じ構成を 2 回構築します。
もっと簡単/正しい方法はありますか(HTTP ワークロードと非 HTTP ワークロードの両方で機能します)ホストをセットアップする前に構成を構築して再利用しますか?
ベストアンサー1
CreateDefaultBuilder
追加されたデフォルトのソースをクリアしてIConfiguration
、AddConfiguration
拡張メソッド。
public static void Main(string[] args)
{
//...
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddCommandLine(args)
.AddJsonFile("appsettings.json")
.Build();
//Do something useful with the configuration...
var host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
builder.Sources.Clear();
builder.AddConfiguration(configuration);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build();
//...
}