Как сделать доступными данные из HostedService в моем конвейере - PullRequest
0 голосов
/ 28 марта 2019

Я использовал этот пример для создания временной фоновой задачи.Используя эту фоновую задачу, у меня есть значение, которое обновляется каждые x секунд, и это прекрасно работает.

Однако я хочу иметь возможность использовать это значение в моем конвейере промежуточного программного обеспечения.Как это достигается?Могу ли я использовать что-то вроде глобальной переменной или как-то ссылаться на HostedService?

Временная фоновая служба

Начато с использованием служб ConfigureServices .AddHostedService << >> ();

{
public class TimerService : IHostedService, IDisposable
    {
        private readonly ILogger _logger;
        private Timer _timer;

        public TimerService (ILogger<TimerService> logger)
        {
            _logger = logger;
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Timed Background Service is starting.");

            _timer = new Timer(DoWork, null, TimeSpan.Zero,
                TimeSpan.FromSeconds(1));

            return Task.CompletedTask;
        }

        private async void DoWork(object state)
            {
            //Do your stuff here
            await Task.Delay(50);
            _logger.LogInformation("Timed Background Service is executing.");
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Timed Background Service is stopping.");

            _timer?.Change(Timeout.Infinite, 0);

            return Task.CompletedTask;
        }

        public void Dispose()
        {
            _timer?.Dispose();
        }
    }
}

Промежуточный конвейер

запущен с использованием Configure

    public async Task Invoke(HttpContext context, ILogger<APIKeyHandler> logger, IConfiguration configuration)
    {
        _logger = logger;

        bool KeyInHeader = context.Request.Headers.ContainsKey("Key");

        if (KeyInHeader)
        {
            if (context.Request.Headers["Key"] = *!!VALUE COLLECTED USING THE TimerService*!!)
            {
                context.Response.StatusCode = (int)HttpStatusCode.NoContent;
                await context.Response.WriteAsync($"Executed");
            }
        }
    }

В настоящее время нет способа получить значения из TimerService.Я хотел бы иметь возможность ссылаться на Timerservice.LatestValue или что-то.Если это не путь, я хотел бы получить некоторые указания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...