Есть ли способ запустить службу DI в области таймера с ядром .net? - PullRequest
0 голосов
/ 02 ноября 2019

Я пишу ядро ​​.net core web-api и хочу запустить код, который собирает и записывает статистику в мою базу данных каждые 4 часа.

Для этого мне нужно вставить контекст моей БДв какой-то метод и запускать его каждые 4 часа с таймером. Проблема в том, что я не могу внедрить БД в этот статический метод.

Я пытался использовать ActivatorUtilities.CreateInstance, но снова я не могу получить IServiceProvider, так как мне также нужно

Это примерно то, что я пытаюсь запустить периодически

    public class StatisticsProvider : IStatisticsProvider
    {
        private readonly AppCtx _appCtx;

        public StatisticsProvider(AppCtx appCtx)
        {
            _appCtx = appCtx;
        }

        public void LogStatistics()
        {
            //get data from database and generate statistics 
            //Write statistics to DB
        }
   }

Спасибо!

1 Ответ

1 голос
/ 02 ноября 2019

Аналогично Где я должен запускать постоянные фоновые задачи в ASP.NET Core? , вы можете использовать HostedServices для периодического выполнения рутинных операций над вашим .NET Core Application.

Одно замечание: кроме кода, подробно описанного в этом ответе SO, для .NET Core 2 и выше вы должны использовать его для DI вместо

services.AddHostedService<YourHostedService>();
...