在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));
我可以为环境变量做类似的事情吗?
答案 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的一些说明:
按照指定的顺序读取配置源。在上面的代码中,最后读取环境变量。通过环境设置的任何配置值都将替换前两个提供程序中设置的值。
环境通常设置为
Development
,Staging
或Production
之一。有关详细信息,请参阅Working with Multiple Environments。
我建议您阅读whole article,以便更好地了解您的选择。