ASP.NET Core 6单例服务关闭浏览器后未触发Dispose问题咨询
ASP.NET Core 6单例服务Dispose未触发问题解决
核心原因
- 服务进程未被优雅终止:关闭浏览器仅断开客户端连接,Web API服务仍在后台运行,不会触发单例服务的释放逻辑。
- 容器对可释放服务的识别规则:容器依赖服务注册时的类型(接口/实现类)判断是否需要处理释放逻辑,若注册时使用的接口未继承
IDisposable,即使实现类实现了该接口,容器也不会主动调用Dispose(你的代码中接口已继承IDisposable,此点可排除,但需牢记该规则)。
解决方案
1. 确保容器识别可释放服务
你的代码中IMyService已正确继承IDisposable,这一步无需修改。后续若调整接口定义,需保持该继承关系,否则容器无法跟踪实现类的释放逻辑。
2. 优雅停止Web API服务
必须终止服务进程才能触发优雅关闭流程,进而调用Dispose:
- 命令行运行(
dotnet run):按Ctrl+C发送中断信号,服务会逐步释放资源。 - Visual Studio调试:点击工具栏的「停止调试」按钮(红色方块),等待进程完全终止。
- IIS Express运行:找到系统托盘的IIS Express图标,右键选择停止对应站点。
3. 验证效果
重新执行测试步骤:
- 启动服务并调用接口,确认
MyService构造函数断点触发。 - 优雅停止服务,此时控制台会输出
Disposing...,Dispose方法断点也会被命中。
内容的提问来源于stack exchange,提问作者user628661
相关产品推荐
相关产品推荐

