使用IHostedService检查数据库

时间:2018-12-19 12:56:44

标签: c# asp.net asp.net-core

我想创建一个始终在后台运行的服务。该服务将始终检查数据库中的表。 我正在使用IHostedService使用asp.net core 2.1,但我的问题是:如果使用AddSingleton,则无法在DBContext上注入Repository,并且如果我使用AddScoped我无法注入HostedService

是否有某种方法可以解决此问题,或者有更好的解决方法?

1 个答案:

答案 0 :(得分:0)

这个link帮助了我很多。

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);
            }
        }

    }
}