ASP.NET Core 2.1 - 与依赖注入相关的堆栈溢出异常
ASP.NET Core 2.1 - Stack overflow exception related to dependency injection
我加载了 4 或 5 次简单的控制器操作后出现堆栈溢出异常。 Web 应用程序在 Azure 上 运行,我能够转储异常信息,问题似乎与依赖注入有关。
internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
{
if (_disposed)
{
ThrowHelper.ThrowObjectDisposedException(); --> this is executed
}
var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor);
_callback?.OnResolve(serviceType, serviceProviderEngineScope);
return realizedService.Invoke(serviceProviderEngineScope);
}
运行 我电脑上的网络应用程序没有问题,只是在 PROD 中失败了。
这就是我在 Azure 中捕获异常的方式:https://blogs.msdn.microsoft.com/benjaminperkins/2017/06/28/capture-a-Whosebugexception-and-make-a-dump-0xc00000fd/
我在 Visual Studio 中打开了转储,我可以识别失败的代码行(如上所述),但我仍然不知道如何修复它。我所有的依赖项都在 'scope' 生命周期内得到解决。
感谢任何帮助。
我终于修好了!我有一个 class,它有大约 20 个依赖项,每个依赖项都有更多的依赖项,可能有 4 或 5 个级别。没有循环依赖,因为这在我的开发环境中运行良好。在我进行了重构并减少了依赖性之后,它运行良好。
因为它在我的开发环境中运行良好,但在 Azure 应用服务中运行良好,所以我假设当应用托管在 Azure 中时,您可以定义的依赖实例或级别存在一些限制。
这是我修复它的方法:
找出最简单的失败案例。
注释掉所有依赖项,然后重试。成功了,好的,这是关于依赖关系。
转储生产中的堆栈溢出异常,因为此错误未在开发环境中发生。
确认这是一个依赖项注入问题并检查 .NET Core 源代码。
减少依赖实例和级别。
部署。如果不起作用,转到(5)。如果成功了,你又开心了:)
几周后我遇到了更多问题,我最终决定迁移到 AutoFac。 从那时起它一直运行良好。 AutoFac 比内置的依赖注入成熟得多。
我加载了 4 或 5 次简单的控制器操作后出现堆栈溢出异常。 Web 应用程序在 Azure 上 运行,我能够转储异常信息,问题似乎与依赖注入有关。
internal object GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
{
if (_disposed)
{
ThrowHelper.ThrowObjectDisposedException(); --> this is executed
}
var realizedService = RealizedServices.GetOrAdd(serviceType, _createServiceAccessor);
_callback?.OnResolve(serviceType, serviceProviderEngineScope);
return realizedService.Invoke(serviceProviderEngineScope);
}
运行 我电脑上的网络应用程序没有问题,只是在 PROD 中失败了。
这就是我在 Azure 中捕获异常的方式:https://blogs.msdn.microsoft.com/benjaminperkins/2017/06/28/capture-a-Whosebugexception-and-make-a-dump-0xc00000fd/
我在 Visual Studio 中打开了转储,我可以识别失败的代码行(如上所述),但我仍然不知道如何修复它。我所有的依赖项都在 'scope' 生命周期内得到解决。
感谢任何帮助。
我终于修好了!我有一个 class,它有大约 20 个依赖项,每个依赖项都有更多的依赖项,可能有 4 或 5 个级别。没有循环依赖,因为这在我的开发环境中运行良好。在我进行了重构并减少了依赖性之后,它运行良好。
因为它在我的开发环境中运行良好,但在 Azure 应用服务中运行良好,所以我假设当应用托管在 Azure 中时,您可以定义的依赖实例或级别存在一些限制。
这是我修复它的方法:
找出最简单的失败案例。
注释掉所有依赖项,然后重试。成功了,好的,这是关于依赖关系。
转储生产中的堆栈溢出异常,因为此错误未在开发环境中发生。
确认这是一个依赖项注入问题并检查 .NET Core 源代码。
减少依赖实例和级别。
部署。如果不起作用,转到(5)。如果成功了,你又开心了:)
几周后我遇到了更多问题,我最终决定迁移到 AutoFac。 从那时起它一直运行良好。 AutoFac 比内置的依赖注入成熟得多。