我有一个使用ASP.NET Core 2.1构建的API,可以执行一些基本的CRUD操作。
这是某种发布管道应用程序,专用于我们的内部流程。其工作原理如下:
我们最初的想法是创建一个后台服务,该服务将定期查询数据库并检查SSIS包的当前状态,然后将实体更新为所需状态(完成/失败)。
但是,这不起作用,因为所有其他服务都在作用域中,而后台服务是单例。
为维护我的实体的正确状态,可以使用哪种方法来运行该后台服务?一个单独的项目?
答案 0 :(得分:0)
我最近在我的API中创建了一个后台服务,以下解决方案为我工作:
在您的后台服务类构造函数中,添加IServiceProvider作为依赖项:
private readonly IServiceProvider _serviceProvider;
public MyBackgoundService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
在实现代码中,使用服务提供商注入数据库上下文或存储库
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while(!stoppingToken.IsCancellationRequested){
using var scope = _serviceProvider.CreateScope();
var context = scope.ServiceProvider.GetRequiredService<MyDbContext>();
}
}