我正在尝试使用IHostedService创建后台服务。如果我只有一个后台服务,一切都运行良好。当我尝试创建多个IHostedService
实现时,只有第一个被注册的实现会真正运行。
services.AddSingleton<IHostedService, HostedServiceOne>();
services.AddSingleton<IHostedService, HostedServiceTwo>();
在上述示例中,调用了HostedServiceOne
上的StartAsync
,但从未调用HostedServiceTwo
上的StartAsync
。如果我交换注册IHostedService
的两个实现的顺序(将IHostedServiceTwo
放在IHostedServiceOne
之前),那么HostedServiceTwo
上的StartAsync
会被调用,但对于HostedServiceOne
则永远不会被调用。编辑:
我被引导到以下内容: 如何在Asp.Net Core 中注册相同接口的多个实现? 然而,这不适用于
IHostedService
。要使用建议的方法,我必须调用serviceProvider.GetServices<IService>();
,但似乎IHostedService.StartAsync
是在内部调用的。我甚至不确定在哪里调用它来触发IHostedService.StartAsync
。