.NET Core托管服务

时间:2019-06-10 20:03:11

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

我需要获得注册托管服务的参考:

services.AddHostedService<DataCollectingService>();

它实现了IHostedService接口,并在Web应用程序启动时正确启动。

我需要在某些控制器中获取服务的引用并访问对象的公共成员。

以下代码不起作用。 xService为空。

public IActionResult T()
{
    using (var serviceScope = _serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
    {
        var xService = serviceScope.ServiceProvider.GetService<DataCollectingService>();

    }
    return RedirectToAction(nameof(Index));
}

3 个答案:

答案 0 :(得分:1)

适用于 .Net Core 3.1+ 的答案由原始问题的 gunr2171 中的 3rd comment 给出:

IEnumerable<IHostedService> allHostedServices = this.serviceProvider.GetService<IEnumerable<IHostedService>>();

将返回对托管服务的现有实例的引用。

答案 1 :(得分:0)

我暂时通过在开始时设置的类中静态存储引用来处理此问题。

答案 2 :(得分:0)

我将所有功能移至Singleton,然后在启动时执行类似的操作

services.AddSingleton<DataCollectingService>();
services.AddHostedService<HostedServiceUsingTheDataCollectionService>();

然后我可以将Singleton注入控制器中。

我不确定Core是否会处理相同的引用(我认为在Core 3中会是这种情况,对于<= 2.2不太确定),但是我会尝试一下。