|
| 1 | +using Microsoft.Extensions.Options; |
| 2 | + |
1 | 3 | namespace Executable; |
2 | 4 |
|
3 | 5 | public class Worker : BackgroundService |
4 | 6 | { |
5 | 7 | private readonly ILogger<Worker> _logger; |
| 8 | + private readonly IServiceScopeFactory _serviceScopeFactory; |
| 9 | + private readonly IOptionsMonitor<Config> _config; |
| 10 | + |
6 | 11 |
|
7 | | - public Worker(ILogger<Worker> logger) |
| 12 | + public Worker(ILogger<Worker> logger, IServiceScopeFactory serviceScopeFactory, IOptionsMonitor<Config> config) |
8 | 13 | { |
9 | 14 | _logger = logger; |
| 15 | + _serviceScopeFactory = serviceScopeFactory; |
| 16 | + _config = config; |
| 17 | + |
| 18 | + _config.OnChange(OnConfigChanged); |
| 19 | + } |
| 20 | + |
| 21 | + private void OnConfigChanged(Config arg1, string? arg2) |
| 22 | + { |
| 23 | + _logger.LogInformation("!! Value changed !!: {Variable}", arg1.Variable); |
10 | 24 | } |
11 | 25 |
|
12 | 26 | protected override async Task ExecuteAsync(CancellationToken stoppingToken) |
13 | 27 | { |
14 | 28 | while (!stoppingToken.IsCancellationRequested) |
15 | 29 | { |
16 | | - if (_logger.IsEnabled(LogLevel.Information)) |
17 | | - { |
18 | | - _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); |
19 | | - } |
20 | | - await Task.Delay(1000, stoppingToken); |
| 30 | + using var scope = _serviceScopeFactory.CreateScope(); |
| 31 | + var config = scope.ServiceProvider.GetRequiredService<IOptionsSnapshot<Config>>(); |
| 32 | + |
| 33 | + _logger.LogInformation("Snapshot variable: {Variable}", config.Value.Variable); |
| 34 | + _logger.LogInformation("Monitor variable: {Variable}", _config.CurrentValue.Variable); |
| 35 | + |
| 36 | + await Task.Delay(5000, stoppingToken); |
21 | 37 | } |
22 | 38 | } |
23 | 39 | } |
0 commit comments