【发布时间】:2019-06-10 20:03:11
【问题描述】:
我需要获得注册托管服务的参考:
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));
}
【问题讨论】:
-
为什么不要求其他服务在您的控制器和托管服务之间传送信息?某种缓存层。
-
这是我的备份计划 - 使用一些静态属性,它会在启动后由服务填充。但我想有一些“更正确”的方式来获取参考。
-
所以根据source code,该项目被注册为
IHostedService。您应该可以在控制器的构造函数中请求IEnumerable<IHostedService>。但我认为您不能直接按名称要求托管服务。 -
好吧,您还可以在代码中创建新范围,这样您的后台服务将立即超出范围。
-
IEnumerable
在控制器的构造函数中不起作用。它创建了一个新实例,但我需要原始引用。
标签: c# asp.net-core asp.net-core-hosted-services