【问题标题】: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);
                }
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      相关资源
      最近更新 更多