在以下情况下无法解析根提供程序中的作用域服务:ASPNETCORE_ENVIRONMENT&QOOT;:&QOOT;Development" [英] Cannot resolve scoped service from root provider when "ASPNETCORE_ENVIRONMENT": "Development"

查看:0
本文介绍了在以下情况下无法解析根提供程序中的作用域服务: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&QUOT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆