Gen*_*ato 4 c# dependency-injection asp.net-core-3.1
尝试解决这样的服务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 缺少此功能。
对我来说,这个功能的缺点是当你在生产中运行时它实际上是默认禁用的。它应该在所有环境中默认开启,因为它会导致多线程问题和内存泄漏。