2

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

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

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

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

但是,这不起作用,因为所有其他服务都是范围内的,而后台服务是单例的。

为了保持我的实体的正确状态,运行该后台服务的替代方法是什么?一个单独的项目?

4

1 回答 1

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>();
    
         }
    }
    
于 2020-05-08T20:39:05.423 回答