ASP.NET Core应用程序中的后台服务

时间:2018-09-03 07:59:00

标签: asp.net-core asp.net-core-hosted-services

我有一个使用ASP.NET Core 2.1构建的API,可以执行一些基本的CRUD操作。

这是某种发布管道应用程序,专用于我们的内部流程。其工作原理如下:

  1. 用户请求重新加载数据(POST)
  2. 用户批准数据重新加载(POST)
  3. 用户启动数据库中的SSIS程序包,该程序将触发数据重新加载(POST)
  4. 后台进程检查该SSIS包的状态,并在完成时将重载的状态设置为已完成/失败

我们最初的想法是创建一个后台服务,该服务将定期查询数据库并检查SSIS包的当前状态,然后将实体更新为所需状态(完成/失败)。

但是,这不起作用,因为所有其他服务都在作用域中,而后台服务是单例。

为维护我的实体的正确状态,可以使用哪种方法来运行该后台服务?一个单独的项目?

1 个答案:

答案 0 :(得分:0)

我最近在我的API中创建了一个后台服务,以下解决方案为我工作:

  1. 在您的后台服务类构造函数中,添加IServiceProvider作为依赖项:

    private readonly IServiceProvider _serviceProvider;
    
    public MyBackgoundService(IServiceProvider serviceProvider)
    {
         _serviceProvider = serviceProvider;
    
    }
    
  2. 在实现代码中,使用服务提供商注入数据库上下文或存储库

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {        
        while(!stoppingToken.IsCancellationRequested){
    
                using var scope = _serviceProvider.CreateScope();
                var context = scope.ServiceProvider.GetRequiredService<MyDbContext>();
    
         }
    }