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 中时,您可以定义的依赖实例或级别存在一些限制。

这是我修复它的方法:

  1. 找出最简单的失败案例。

  2. 注释掉所有依赖项,然后重试。成功了,好的,这是关于依赖关系。

  3. 转储生产中的堆栈溢出异常,因为此错误未在开发环境中发生。

  4. 确认这是一个依赖项注入问题并检查 .NET Core 源代码。

  5. 减少依赖实例和级别。

  6. 部署。如果不起作用,转到(5)。如果成功了,你又开心了:)

几周后我遇到了更多问题,我最终决定迁移到 AutoFac从那时起它一直运行良好。 AutoFac 比内置的依赖注入成熟得多。