Использование IHostedService для проверки БД - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу создать сервис, который все время работает в фоновом режиме.Этот сервис всегда будет проверять таблицу в моей БД.Я делаю это с asp.net core 2.1, используя IHostedService, и моя проблема: если я использую AddSingleton, я не могу ввести DBContext на Repository, и если я использую AddScoped, я не могу ввестиHostedService.

Есть ли какой-нибудь способ исправить это или лучший способ сделать это?

1 Ответ

0 голосов
/ 19 декабря 2018

Эта ссылка мне очень помогла.

Внедрение IServiceScopeFactory внутрь HostedService может предоставить экземпляры, решающие проблему.Не уверен, что это лучший способ сделать это.Если вы, ребята, знаете лучший способ сделать это, оставьте комментарий:)

Вот код.

Реализация HostedService:

public class TestService : HostedService
{
    private readonly IServiceScopeFactory _serviceScopeFactory;

    public TestService(IServiceScopeFactory serviceScopeFactory)
    {
        _serviceScopeFactory = serviceScopeFactory;          
    }

    protected override async Task ExecuteAsync(CancellationToken cancellationToken)
    {
        using (var scope = _serviceScopeFactory.CreateScope())
        {
            IMyService myScopedService = scope.ServiceProvider.GetRequiredService<IMyService>();

            while (!cancellationToken.IsCancellationRequested)
            {
                await myScopedService.Execute();
                await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken);
            }
        }

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