.NET Core3.1 Azure Function出现StackOverflow异常排查求助
问题原因分析
- 你碰到的
StackOverflowException,根源就是那行.AddSingleton(serviceProvider => serviceProvider)代码。它试图把IServiceProvider本身注册成单例服务,DI容器解析这个服务时会陷入无限递归:容器要创建IServiceProvider实例,工厂函数又需要传入IServiceProvider,循环调用直接把栈空间耗光,最终在TryAddEnumerables处理服务注册集合时触发了异常。
移除该行代码的副作用说明
- 没有破坏性影响:.NET Core的DI容器默认就支持直接注入
IServiceProvider,根本不需要手动注册这一行。移除后,你照样能在任意服务的构造函数里正常注入IServiceProvider,容器会自动提供内置的实例。 - 规避潜在隐患:手动注册
IServiceProvider会打乱容器的内置逻辑,除了当前的栈溢出问题,后续还可能出现服务解析顺序异常、作用域管理混乱等不可预料的问题,移除后反而能让DI容器回到正常工作状态。
后续建议
- 检查代码里依赖
IServiceProvider的场景:如果是为了动态解析服务,直接用默认的注入方式就行,完全不需要手动注册那行代码。 - 要是需要更精细的服务解析控制,建议注入
IServiceScopeFactory来创建作用域,这是DI容器推荐的最佳实践,比直接依赖IServiceProvider更稳妥。
内容的提问来源于stack exchange,提问作者kudlatiger
相关产品推荐
相关产品推荐

