ASP.NET Core 2.1-与依赖项注入有关的堆栈溢出异常

问题描述 投票:0回答:1

加载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);
    }

在计算机上运行Web应用程序没有问题,仅在PROD中失败。

这是我在Azure中捕获异常的方法:https://blogs.msdn.microsoft.com/benjaminperkins/2017/06/28/capture-a-stackoverflowexception-and-make-a-dump-0xc00000fd/

我在Visual Studio中打开转储,我可以识别出失败的代码行(如上所述),但我仍然不知道如何解决它。我的所有依赖关系都通过“作用域”生存期解决。

感谢您的任何帮助。

.net-core dependency-injection stack-overflow
1个回答
1
投票

我终于解决了!我有一类具有20个依赖项的类,每个依赖项都有更多的依赖项,可能是4或5级。没有循环依赖关系,因为这在我的开发环境中运行良好。在我进行了重构并减少了依赖性之后,它工作得很好。

因为它在我的开发环境中可以正常运行,但在Azure App Service中不能正常运行,所以我认为在Azure中托管应用程序时可以定义的依赖项实例或级别存在一些限制。

这是我的解决方法:

1)查找失败的最简单情况。

2)注释掉所有缺陷,然后重试。正常,是关于依赖项的。

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

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

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

6)部署。如果不起作用,请转到(5)。如果有效,您再次感到高兴:)

© www.soinside.com 2019 - 2024. All rights reserved.