asp.net-core
конфигурация
Поиск…
Вступление
Ядро 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:
- Сначала создается новый
ConfigurationBuilder
. - Затем он устанавливает базовый путь, который будет использоваться для вычисления абсолютного пути дальнейших файлов
- Он добавляет необязательный
appsettings.json
в конструктор конфигурации и отслеживает его изменения. - Он добавляет дополнительный конфигурационный файл
appsettings.environementName.json
связанный сappsettings.environementName.json
- Затем он добавляет переменные 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"
})
Это может показаться полезным в сценариях интеграции / модульного тестирования.