尝试解决此类服务时遇到异常
IApplicationBuilder.ApplicationServices.GetServices<AdminPanelDbContext>();
并且 "ASPNETCORE_ENVIRONMENT": "Development"
设置为开发。
例外:
无法从根提供程序解析作用域服务“AdminPanel.DAL.DbContexts.AdminPanel.AdminPanelDbContext”。
但是当我设置
"ASPNETCORE_ENVIRONMENT": "Production"
时一切正常。
我看了下
appsettnings.Development.json
,和appsettings.json
没有什么不同。还有其他设置会影响这个吗?
请参阅ASP.NET Core 中的依赖注入 - 范围验证:
当应用程序在开发环境中运行并调用
来构建主机时,默认服务提供者会执行检查以验证:CreateDefaultBuilder
- 范围内的服务不是从根服务提供商处解析的。
- 作用域服务不会注入到单例中。
[...]
作用域服务由创建它们的容器处理。如果在根容器中创建作用域服务,则该服务的生命周期将有效提升为单例,因为它仅在应用程序关闭时由根容器释放。当调用
时,验证服务范围可以捕获这些情况。BuildServiceProvider
有关更多信息,请参阅范围验证。
此功能是 ASP.NET Core v3 中的新增功能。以前版本的 ASP.NET Core 缺少此功能。
对我来说,当前实现的缺点是,当您在生产环境中运行时,此验证实际上是默认禁用的。验证应该在所有环境中默认开启,因为忽略警告将导致多线程问题和内存泄漏。