То, что вы делаете, это то, что вы создаете отдельный компоновщик конфигурации, который загружает свои собственные источники. Вы делаете это, хотя по умолчанию компоновщик веб-хоста уже содержит несколько источников конфигурации, включая файлы appsettings.json
и appsettings.<environment>.json
.
Говоря services.AddSingleton<IConfiguration>(config)
, вы фактически заменяете конфигурацию по умолчанию своей собственной. Хотя это, вероятно, будет иметь правильный эффект в большинстве случаев, я могу себе представить, что это может привести к некоторым проблемам позже, поскольку у вас фактически есть две разные конфигурации в вашем приложении (хотя одна из них - конфигурация по умолчанию - в основном недоступна).
Как правило, я бы рекомендовал вам не делать этого, а изменить конфигурацию по умолчанию, чтобы она загружала все нужные вам источники. Вы можете сделать это, позвонив по номеру WebHostBuilder.ConfigureAppConfiguration
:
public static IWebHostBuilder CreateWebHostBuilder(string[] args, IConfiguration config)
{
var webHostBuilder = WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.ConfigureAppConfiguration(config =>
{
config.AddJsonFile("appsettings.local.json", optional: true);
})
.UseStartup<Startup>();
return webHostBuilder;
}
Теперь это добавит еще один файл JSON в конструктор конфигурации по умолчанию. Поэтому значение по умолчанию IConfiguration
будет также принимать значения конфигурации из этого источника. Таким образом, вам не нужно будет создавать ConfigurationBuilder
внутри вашего Program.cs
.
Обратите внимание, что appsettings.local.json
теперь является последним источником конфигурации, поэтому, какие бы ни были настроены параметры, будут перезаписаны ранее настроенные параметры. Так что учтите это, если вы используете аргументы командной строки или переменные окружения.
В заключение отметим, что если вы намеревались использовать файл local
только в определенной локальной среде, то вы также можете просто установить для среды хостинга значение local
для автоматической загрузки appsettings.local.json
как часть настройки конфигурации по умолчанию. Это связано с тем, что компоновщик хоста по умолчанию автоматически выберет appsettings.<environment>.json
, если он существует.