ASP.NET Core 知识速递 – Day 14:常用配置通用主机方法

上一节中我们介绍了通用主机对象,这一节我们介绍配置通用主机的方法。
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

联系我们
联系我们
分享本页
返回顶部