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

Son*_*Sam 4 c# configuration environment-variables .net-core

在 dotnet core 中,我想将一组环境变量绑定到一个类,使用IConfigurationRootBind方法与您对appsettings.json

例如

具有以下 appsettings.json

{
    "EnviromentSettings":
    {
        "ValueOne": "Foo1",
        "ValueTwo": "Foo2"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public class EnviromentSettings
{
    public string ValueOne {get;set;}
    public string ValueTwo {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

使用此代码

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));
Run Code Online (Sandbox Code Playgroud)

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

Tri*_*cks 5

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

appsettings.json

{
 "ValueOne": "Foo1",
 "ValueTwo": "Foo2"
}
Run Code Online (Sandbox Code Playgroud)

代码更改

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}");
Run Code Online (Sandbox Code Playgroud)