使用IConfigurationRoot将环境变量绑定到类

时间:2017-01-29 12:51:03

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

在dotnet核心中,我想使用IConfigurationRootBind方法将一组环境变量绑定到类,与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));

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

2 个答案:

答案 0 :(得分:2)

是的,只需从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}");

答案 1 :(得分:1)

您需要添加的唯一内容是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的一些说明:

  

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

     

环境通常设置为DevelopmentStagingProduction之一。有关详细信息,请参阅Working with Multiple Environments

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