Применяемый для создания приложения объект WebApplicationBuilder уже предоставляет некоторую конфигурацию по умолчанию. Посмотрим, что представляет подключаемая по умолчанию конфигурация:
Эта конфигурация загружается из разных источников в следующем порядке:
Сначала в качестве провайдера конфигурации устанавливается объект класса ChainedConfigurationProvider, который добавляет объект IConfiguration в качестве источника конфигурации и который фактически соединяет все далее применяемые провайдеры конфигурации в одну цепочку.
Далее загружается конфигурация из файла appsettings.json
Затем загружается конфигурация из файла appsettings.[Environment].json, где [Environment]
передает название окружения,
например, appsettings.Production.json и appsettings.Development.json, благодаря чему мы можем задать
конфигурацию для разных состояний проекта
Если проект запущен в окружении с именем "Development", загружается конфигурация App secrets (секретные настройки)
Затем загружаются переменные среды
В конце загружаются аргументы командной строки
Как мы видим, объект конфигурации может использовать одновременно сразу несколько источников и провайдеров конфигурации. Все подключемые источники
конфигурации считываются в том порядке, в котором они были добавлены. Если разные источники конфигурации содержат одинаковые ключи, то
используется значение, последнего добавленного источника конфигурации. Например, в данном случае значения из appsettings.Develoment.json
перекроют значения с теми же ключами из appsettings.json
.
И в своем приложении мы можем также объединять конфигурационные настройки из разных источников:
var builder = WebApplication.CreateBuilder(); var app = builder.Build(); builder.Configuration .AddJsonFile("config.json") .AddXmlFile("config.xml") .AddIniFile("config.ini") .AddInMemoryCollection(new Dictionary<string, string> { { "name", "Sam"}, { "age", "32"} }); ; app.Map("/", (IConfiguration appConfig) => $"{appConfig["name"]} - {appConfig["age"]}"); app.Run();