|
| 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