Поиск…


Вступление

Ядро Asp.net обеспечивает конфигурирование абстракций. Они позволяют загружать настройки конфигурации из разных источников и создавать окончательную конфигурационную модель, которая затем может быть использована вашим приложением.

Синтаксис

  • IConfiguration
  • string this[string key] { get; set; }
  • IEnumerable<IConfigurationSection> GetChildren();
  • IConfigurationSection GetSection(string key);

Доступ к конфигурации с использованием инъекции зависимостей

Рекомендуемый подход заключается в том, чтобы избежать этого и скорее использовать IOptions<TOptions> и IServiceCollection.Configure<TOptions> .

Тем не менее, это довольно просто сделать доступным приложение IConfigurationRoot .

В конструкторе Startup.cs у вас должен быть следующий код для создания конфигурации,

 Configuration = builder.Build();

Здесь Configuration является экземпляром IConfigurationRoot и добавляет этот экземпляр в качестве Singleton в коллекцию службы в методе ConfigureServices, Startup.cs,

 public void ConfigureServices(IServiceCollection services)
 {
    services.AddSingleton<IConfigurationRoot>(provider => Configuration);

Например, теперь вы можете получить доступ к конфигурации в контроллере / службе

  public MyController(IConfigurationRoot config){
      var setting1= config.GetValue<string>("Setting1")
  }

Начиная

В этом примере мы опишем, что произойдет, если вы поднимете новый проект.

Во-первых, к вам будут добавлены следующие зависимости (в настоящее время файл project.json ):

"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",

Он также создаст конструктор в вашем файле Startup.cs который будет отвечать за построение конфигурации с помощью ConfigurationBuilder свободного api:

  1. Сначала создается новый ConfigurationBuilder .
  2. Затем он устанавливает базовый путь, который будет использоваться для вычисления абсолютного пути дальнейших файлов
  3. Он добавляет необязательный appsettings.json в конструктор конфигурации и отслеживает его изменения.
  4. Он добавляет дополнительный конфигурационный файл appsettings.environementName.json связанный с appsettings.environementName.json
  5. Затем он добавляет переменные environement.
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

Если один и тот же параметр установлен в нескольких источниках, последний добавленный источник будет выигран, и его значение будет выбрано.

Конфигурация затем может быть использована с использованием свойства indexer. Символ двоеточия : символ служит разделителем пути.

Configuration["AzureLogger:ConnectionString"]

Это будет искать значение конфигурации ConnectionString в разделе AzureLogger .

Работа с переменными среды

Вы можете настроить конфигурацию из переменных среды, вызвав .AddEnvironmentVariables() на вас ConfigurationBuilder .

Он будет загружать переменные среды с префиксом APPSETTING_ Затем он будет использовать двоеточие : в качестве разделителя пути ключа.

Это означает, что: после настроек environement:

APPSETTING_Security:Authentication:UserName = a_user_name
APPSETTING_Security:Authentication:Password = a_user_password

Будет эквивалент этого json:

{
    "Security" : {
       "Authentication" : {
           "UserName" : "a_user_name",
           "Password" : "a_user_password" 
        } 
    }
}

** Обратите внимание, что Azure Service будет передавать настройки в качестве переменных среды. Префикс будет установлен для вас прозрачно. Итак, чтобы сделать то же самое в Azure, просто установите два параметра Application Settings в клике AppSettings:

Security:Authentication:UserName         a_user_name
Security:Authentication:Password         a_user_password

Опционная модель и конфигурация

При работе с большими конфигурационными наборами стоимости может оказаться довольно неудобным загрузить их на одну покупку.

Опционная модель, которая поставляется с asp.net, предлагает удобный способ сопоставления section с dotnet poco : например, можно было бы гидратировать StorageOptions непосредственно из раздела конфигурации b, добавляя пакет Microsoft.Extensions.Options.ConfigurationExtensions и вызывающий Configure<TOptions>(IConfiguration config) .

services.Configure<StorageOptions>(Configuration.GetSection("Storage"));

В источнике конфигурации памяти

Вы также можете настроить источник из объекта памяти, например Dictionary<string,string>

.AddInMemoryCollection(new Dictionary<string, string>
{
    ["akey"] = "a value"
})

Это может показаться полезным в сценариях интеграции / модульного тестирования.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow