В моем приложении ASP.NET Core я связываю appsettings.json со строго типизированным классом AppSettings .
public Startup(IHostingEnvironment environment)
{
var builder = new ConfigurationBuilder()
.SetBasePath(environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration);
//...
}
В одном классе я обертываю этот класс AppSettings следующим образом:
public class AppSettingsWrapper : IAppSettingsWrapper
{
private readonly IOptions<AppSettings> _options;
public AppSettingsAdapter(IOptions<AppSettings> options)
{
_options = options ?? throw new ArgumentNullException("Options cannot be null");
}
public SomeObject SomeConvenienceGetter()
{
//...
}
}
Теперь я пытаюсь перезагрузить AppSettings, если файл json изменится. Я где-то читал, что класс IOptionsMonitor может обнаруживать изменения, но в моем случае это не работает.
Я пытался вызвать событие OnChange , например, для тестирования:
public void Configure(IApplicationBuilder applicationBuilder, IOptionsMonitor<AppSettings> optionsMonitor)
{
applicationBuilder.UseStaticFiles();
applicationBuilder.UseMvc();
optionsMonitor.OnChange<AppSettings>(vals =>
{
System.Diagnostics.Debug.WriteLine(vals);
});
}
Событие никогда не вызывается, когда я меняю файл json. Кто-нибудь знает, что я могу изменить, чтобы заставить механику перезагрузки работать в моем сценарии?