上一节中我们介绍了通用主机对象,这一节我们介绍配置通用主机的方法。
1.ConfigureHostConfiguration方法
我们从名字中可以看出这个是配置主句的配置方法,这个方法发生在主机配置的最早阶段,会影响主机的初始化行为。配置主要的数据来源是环境变量,命令行参数,以及hostsettings.json。配置通过IHostEnvironment对象获取。
2.ConfigureAppConfiguration方法
这个方法主要是应用程序级别的配置,主机的配置方法执行之后才会执行这个配置,影响应用程序运行的配置,例如业务逻辑的 JSON 文件、数据库配置等。主要的配置数据来自appsettings.json,配置通过IConfiguration对象获取。
3.例子
public class Program
{
public static async Task Main(string[] args)
{
await new HostBuilder()
.ConfigureHostConfiguration(configHost =>
{
// Add environment variables
configHost.AddEnvironmentVariables();
// Add command-line arguments
configHost.AddCommandLine(args);
// Add in-memory configuration for host-level
configHost.AddInMemoryCollection(new Dictionary<string, string>
{
{ "Application.Name", "Host-Set-01" },
{ "Application.Version", "Host-Set-1.0.0" }
});
})
.ConfigureAppConfiguration((hostContext, configApp) =>
{
// Add JSON file configuration
configApp.AddJsonFile("appsettings.json", optional: true);
// Add environment variables for app-level
configApp.AddEnvironmentVariables();
// Add in-memory configuration for app-level
configApp.AddInMemoryCollection(new Dictionary<string, string>
{
{ "Application.Name", "App-Set-01" },
{ "Application.Version", "App-Set-1.0.0" }
});
})
.ConfigureServices((hostContext, services) =>
{
// Register the hosted service
services.AddHostedService<SampleHostedService>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
.Build()
.RunAsync();
}
}
public class SampleHostedService : IHostedService
{
private readonly ILogger _logger;
private readonly IConfiguration _config;
public SampleHostedService(IConfiguration config, ILogger<SampleHostedService> logger)
{
_config = config;
_logger = logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogDebug("=== Testing Configuration Priority ===");
_logger.LogDebug("Application.Name: {0}", _config["Application.Name"]);
_logger.LogDebug("Application.Version: {0}", _config["Application.Version"]);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogDebug("End of Host");
return Task.CompletedTask;
}
}
我们通过上面的例子测试配置的优先级:
从结果中可以看到ConfigureAppConfiguration方法配置的优先级更高。
我们使用通过命令行的方式传入:
结果一样的。
源代码地址:
https://github.com/bingbing-gui/AspNetCore-Skill/tree/master/src/aspnetcore-knowledge-point/generic-host-configure
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/424565.html