在以下情况下无法解析根提供程序中的作用域服务:ASPNETCORE_ENVIRONMENT&QOOT;:&QOOT;Development"; [英] Cannot resolve scoped service from root provider when "ASPNETCORE_ENVIRONMENT": "Development"
本文介绍了在以下情况下无法解析根提供程序中的作用域服务:ASPNETCORE_ENVIRONMENT&QOOT;:&QOOT;Development";的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
尝试解析此类IApplicationBuilder.ApplicationServices.GetServices<AdminPanelDbContext>();
和"ASPNETCORE_ENVIRONMENT": "Development"
设置为开发的服务时出现异常。
异常:
无法从根提供程序解析作用域服务‘AdminPanel.DAL.DbContexts.AdminPanel.AdminPanelDbContext’。
但当我设置"ASPNETCORE_ENVIRONMENT": "Production"
时,一切正常。
我在appsettnings.Development.json
下查看,与appsettings.json
没有什么不同。是否有任何其他设置正在影响此操作?
推荐答案
参见Dependency injection in ASP.NET Core - Scope validation:
当应用程序在开发环境中运行并调用
CreateDefaultBuilder
以构建主机时,默认服务提供商将执行检查以验证:
- 未从根服务提供程序解析作用域服务。
- 作用域服务未注入到单例中。
[...]
作用域服务由创建它们的容器处置。如果在根容器中创建了作用域服务,则该服务的生命周期将有效地提升为单例,因为它只在应用程序关闭时由根容器处理。调用BuildServiceProvider
时,验证服务范围会捕获这些情况。有关详细信息,请参阅Scope validation。
此功能是ASP.NET Core v3中的新功能。以前版本的ASP.NET Core缺少此功能。
对我来说,该功能的缺点是当您在生产环境中运行时,它实际上在默认情况下是禁用的。它在所有环境中都应该是默认打开的,因为它会导致多线程问题和内存泄漏。
这篇关于在以下情况下无法解析根提供程序中的作用域服务:ASPNETCORE_ENVIRONMENT&QOOT;:&QOOT;Development";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文