【问题标题】:Bind Environment Variables to Class Using IConfigurationRoot使用 IConfigurationRoot 将环境变量绑定到类
【发布时间】:2017-06-14 17:38:15
【问题描述】:

在 dotnet 核心中,我想使用 IConfigurationRoot 和 Bind 方法将一组环境变量绑定到一个类,类似于您对 appsettings.json 所做的操作

举例

有以下appsettings.json

{
    "EnviromentSettings":
    {
        "ValueOne": "Foo1",
        "ValueTwo": "Foo2"
    }
}

我可以将EnvimentSettings 部分绑定到以下类

public class EnviromentSettings
{
    public string ValueOne {get;set;}
    public string ValueTwo {get;set;}
}

使用此代码

public IConfigurationRoot Configuration { get; }

var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

services.Configure<EnviromentSettings>(options => Configuration.GetSection("EnviromentSettings").Bind(options));

我可以对环境变量做类似的事情吗?

【问题讨论】:

    标签: c# configuration environment-variables .net-core


    【解决方案1】:

    是的,只需从 appsettings.json 文件中删除“EnvironmentSettings”即可。这对我有用。注意:它将首先从 appsettings.json 文件中读取,并覆盖环境变量(如果存在)。

    appsettings.json

    {
     "ValueOne": "Foo1",
     "ValueTwo": "Foo2"
    }
    

    代码更改

    EnvironmentSettings settings = new EnvironmentSettings();
    
    var builder = new ConfigurationBuilder()
                        .AddJsonFile("config.json")
                        .AddEnvironmentVariables();
    config = builder.Build();
    
    ConfigurationBinder.Bind(config, settings);
    
    Console.WriteLine($"ValueOne: {settings.ValueOne}");
    Console.WriteLine($"ValueTwo: {settings.ValueTwo}");
    

    【讨论】:

      【解决方案2】:

      您唯一需要添加的是simple method:

      var builder = new ConfigurationBuilder()
          .SetBasePath(env.ContentRootPath)
          .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
          .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
          // yes, that simple
          .AddEnvironmentVariables();
      

      来自 MSDN 的一些注释:

      配置源按照指定的顺序读取。在上面的代码中,最后读取环境变量。通过环境设置的任何配置值都将替换之前两个提供程序中设置的值。

      环境通常设置为Development、Staging 或Production 之一。请参阅Working with Multiple Environments 了解更多信息。

      我建议您阅读 whole article 以更好地了解您的选择。

      【讨论】:

        猜你喜欢
        • 2019-11-14
        • 1970-01-01
        • 2017-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        • 2021-03-05
        • 2011-02-07
        相关资源
        最近更新 更多