我一起使用 AddSingleton 和 AddHostedService 在后端有一个长时间运行的服务(BackgroundService),同时控制器访问相同的服务来获取数据。这是我发现的:
调试输出(构造函数调用两次,查看秒数差异)
BGService 构造函数服务 addGame:游戏计数为 1 BGService 构造函数服务 addGame:游戏计数为 1 ExecuteAsync 1 :游戏计数为 1:[ "CONSTRUCTOR GAME AT 10/29/2021 10:37:25 AM(0)" ] ... ... ExecuteAsync 7 :游戏计数为 1:[ "CONSTRUCTOR GAME AT 10/29/2021 10:37:25 AM(0)" ] service addGame:games count is 2 After AddGame: [
"CONSTRUCTOR GAME AT 10/29 /2021 10:37:24 AM(0)", "游戏 0(1)"]
如果只使用 AddSingleton,它就可以工作。
如果仅使用 AddHostedService,则后台服务正在运行,但 DI 无法在控制器中工作(异常)。
**> 失败:
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware 1 执行请求时发生未处理的异常。System.InvalidOperationException:尝试激活“CoreServiceSignalRSample.Controllers.WeatherForecastController”时无法解析类型“CoreServiceSignalRSample.service.IBGService”的服务。
在 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp,类型 type,Type …