using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
public string Test { get; set; }
public static async Task Main()
var builder = CreateHostBuilder();
await builder.Build().RunAsync();
private static IHostBuilder CreateHostBuilder()
File.WriteAllText("appsettings.json", "{\"Test\": \"1\"}");
.ConfigureAppConfiguration(builder => builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true))
.ConfigureLogging(builder => builder.AddConsole())
.ConfigureServices((ctx, services) =>
.Configure<Settings>(ctx.Configuration)
.AddHostedService<TestHost>());
public class TestHost : IHostedService
private readonly IOptionsMonitor<Settings> _options;
private readonly ILogger<TestHost> _logger;
public TestHost(IOptionsMonitor<Settings> options, ILogger<TestHost> logger)
public async Task StartAsync(CancellationToken token)
while(!token.IsCancellationRequested)
_logger.LogInformation(_options.CurrentValue.Test);
await Task.Delay(TimeSpan.FromSeconds(1), token);
_logger.LogWarning("Change 'Test' = 2");
File.WriteAllText("appsettings.json", "{\"Test\": \"2\"}");
public Task StopAsync(CancellationToken token)
return Task.CompletedTask;