【发布时间】:2019-01-31 21:34:43
【问题描述】:
我的 .net 核心应用需要在指定的时间间隔内爬取数据。我选择实现IHostedService 以与API 并行运行它。托管服务需要注入一些服务。我在startup.cs 中注册了它们,但出现错误:
System.InvalidOperationException: '不能使用单例'Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor'中的范围服务'IXService'。'
我的 startup.cs:
services.AddScoped<IXService, XService>();
services.AddHostedService<MyHostedService>();
我在使用 DbContext 时遇到了类似的问题,我使用 https://stackoverflow.com/a/48368934/8475133 解决了它,但这次我需要通过更深层次的依赖注入,并且在每个层中处理 IServiceScopeFactory 似乎不是一个优雅的解决方案。
【问题讨论】:
-
我不明白。如果您可以为
DbContext解决同样的问题,为什么您不能为MyHostedService需要的其余服务解决它? -
"...似乎不是一个优雅的解决方案",假设我有很多服务要深入注入,每个服务都在构造函数中消耗一些其他服务,这个解决方案会导致额外的代码行使用 usings ,而标准的依赖注入只是注册服务的几行代码,然后将它们包含在构造函数的参数中,这就更清楚了。
-
但您接受了与您在问题上发布的链接重复的答案?
标签: c# asp.net-core dependency-injection asp.net-core-hosted-services