0

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

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));
}
4

3 回答 3

1

gunr2171在原始问题的第 3 条评论中给出了适用于 .Net Core 3.1+ 的答案:

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

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

于 2021-05-14T18:06:03.867 回答
0

我通过在启动期间设置的类中静态存储引用来临时处理这个问题。

于 2019-06-10T20:36:38.777 回答
0

我会将所有功能移至 Singleton,然后在我的初创公司中,我会做类似的事情

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

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

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

于 2019-06-10T20:38:21.817 回答