2017-01-29 7 views
2

В Dotnet ядре я хочу связать набор переменных окружения к классу с помощью IConfigurationRoot и Bind аналогичным методом, что вы делаете с appsettings.jsonBind Переменные среды в классе Использование IConfigurationRoot

Для примера

, имеющий следующий 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

Да, просто удалите «EnvironmentSettings» из файла appsettings.json. Это работает для меня. Примечание. Сначала он будет считываться из файла 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}"); 
0

Единственное, что вам нужно добавить это 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, чтобы лучше понять ваши варианты.

Смежные вопросы