Я хочу начать регистрацию перед веб-хостом, чтобы регистрировались ошибки запуска. Поэтому я следовал рекомендованному порядку инициализации Serilog : 1) конфигурация, 2) регистрация, 3) веб-хостинг. Я не использую CreateDefaultBuilder()
.
Так что мой Program.cs
имеет:
// setup config
var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production";
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional:false, reloadOnChange:true)
.AddJsonFile($"appsettings.{envName}.json", optional:true, reloadOnChange:true)
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();
// setup Serilog logging
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration) // <<< uses config from above
.CreateLogger()
// setup webhost
new WebHostBuilder()
.UseConfiguration(configuration) // <<< uses config from above
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseSerilog()
.Build()
.Run();
Это работает, но изменения в appsettings.json
не обнаруживаются, хотя я указал reloadOnChange:true
.
Однако, когда я использую ConfigureAppConfiguration()
, тогда обнаруживаются изменения:
new WebHostBuilder()
.ConfigureAppConfiguration((context, config) => {
// .. duplicate config here
})
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseSerilog()
.Build()
.Run();
Но это означает дублирование и, возможно, непредвиденные проблемы - то есть это взлом. Как мне решить эту проблему?
UPDATE
Согласно ответу @ StephenZeng, UseConfiguration
мне здесь не поможет, поэтому я полагаю, что мне нужно использовать ConfigureAppConfiguration
. Но проблема остается: как мне сначала запустить мой конфиг, а затем использовать его несколько раз, не переопределяя его?