我想创建一个始终在后台运行的服务。该服务将始终检查数据库中的表。
我正在使用IHostedService
使用asp.net core 2.1,但我的问题是:如果使用AddSingleton
,则无法在DBContext
上注入Repository
,并且如果我使用AddScoped
我无法注入HostedService
。
是否有某种方法可以解决此问题,或者有更好的解决方法?
答案 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);
}
}
}
}