You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6单例服务关闭浏览器后未触发Dispose问题咨询

ASP.NET Core 6单例服务Dispose未触发问题解决

核心原因

  1. 服务进程未被优雅终止:关闭浏览器仅断开客户端连接,Web API服务仍在后台运行,不会触发单例服务的释放逻辑。
  2. 容器对可释放服务的识别规则:容器依赖服务注册时的类型(接口/实现类)判断是否需要处理释放逻辑,若注册时使用的接口未继承IDisposable,即使实现类实现了该接口,容器也不会主动调用Dispose(你的代码中接口已继承IDisposable,此点可排除,但需牢记该规则)。

解决方案

1. 确保容器识别可释放服务

你的代码中IMyService已正确继承IDisposable,这一步无需修改。后续若调整接口定义,需保持该继承关系,否则容器无法跟踪实现类的释放逻辑。

2. 优雅停止Web API服务

必须终止服务进程才能触发优雅关闭流程,进而调用Dispose:

  • 命令行运行(dotnet run):按Ctrl+C发送中断信号,服务会逐步释放资源。
  • Visual Studio调试:点击工具栏的「停止调试」按钮(红色方块),等待进程完全终止。
  • IIS Express运行:找到系统托盘的IIS Express图标,右键选择停止对应站点。

3. 验证效果

重新执行测试步骤:

  1. 启动服务并调用接口,确认MyService构造函数断点触发。
  2. 优雅停止服务,此时控制台会输出Disposing...,Dispose方法断点也会被命中。

内容的提问来源于stack exchange,提问作者user628661

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:50:22