【问题标题】:ConfigurationBuilder with strongly typed configuration具有强类型配置的 ConfigurationBuilder
【发布时间】:2018-09-12 22:20:41
【问题描述】:

如何创建一个搜索环境变量的ConfigurationBuilder,如果没有找到,则使用appSetting 参数代替?

我目前的代码:

public void ConfigureServices(IServiceCollection services)
{
    // Get configuration
    var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
    var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddEnvironmentVariables()
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
        .AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: false)
        .Build();
    var settings = new AppSettings();
    configuration.GetSection("App").Bind(settings);

    // ...

    services.AddSingleton<ILogger, LogConsole>()
        .AddSingleton<IDatabaseManager, PostgresDatabaseManager>()
        .AddSingleton<IDbConnectionFactory, PostgreDbConnectionFactory>()
        .Configure<AppSettings>(configuration.GetSection("App"))
        .AddOptions()
        .BuildServiceProvider();
}

问题是“.Configure&lt;AppSettings&gt;(configuration.GetSection("App"))”行只保留AppSettings 中的内容,但如下所示:

configuration 拥有我所有的环境变量 (Count = 89) 和 AppSettings 变量。

我尝试了以下内容:
https://www.jerriepelser.com/blog/aspnet-core-no-more-worries-about-checking-in-secrets/

但我的印象是这种类型的配置与强类型配置不太匹配。

【问题讨论】:

    标签: c# asp.net-core configuration


    【解决方案1】:

    这就是默认情况下的工作方式。您定义配置提供程序的顺序很重要。 ASP.NET Core 将以相同的顺序使用它们。基本上,它所做的只是从每个来源收集值并将它们放入字典中。随着每个进一步的来源被利用,它要么将额外的键值对添加到字典中,要么覆盖现有的键值对,就像字典一样。这创建了一种简单但有效的覆盖能力,因为您添加的最后一个配置源将始终对特定键的值拥有最后发言权。

    例如,在您这里的情况。首先加载环境变量。然后,将解析您的 JSON 文件并添加其中的任何值。因此,如果您没有定义特定的环境变量,默认情况下它的值将来自 JSON 文件。

    如果您想要相反的事情,如果设置了环境变量,则应该使用该值而不是 JSON 文件中定义的值,只需更改提供程序的顺序即可:

    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
    .AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: false)
    .AddEnvironmentVariables()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2020-08-02
      • 2017-04-17
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多