【问题标题】:Using IHostedService to check a DB使用 IHostedService 检查数据库
【发布时间】:2018-12-19 12:56:44
【问题描述】:
我想创建一个一直在后台运行的服务。该服务将始终检查我的数据库中的表。
我正在使用 IHostedService 使用 asp.net core 2.1,我的问题是:如果我使用 AddSingleton 我不能在 Repository 上注入 DBContext,如果我使用 AddScoped 我不能注入HostedService.
有什么方法可以解决这个问题,或者有更好的方法吗?
【问题讨论】:
标签:
c#
asp.net
asp.net-core
【解决方案1】:
这个link 帮助了我很多。
在HostedService 中注入IServiceScopeFactory 可以提供解决问题所需的实例。不确定这是否是更好的方法。如果你们知道更好的方法,请发表评论:)
这里是代码。
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);
}
}
}
}