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

注册为InstancePerRequest的SqlConnection:需Close还是Dispose?

关于Autofac中InstancePerRequest注册SqlConnection的释放问题

结论:不需要手动调用Close()或Dispose(),依赖Autofac的生命周期管理即可。

  • Autofac的InstancePerRequest生命周期特性:
    注册为InstancePerRequest的对象,Autofac会在整个请求流程结束后,自动调用其Dispose方法(只要对象实现了IDisposable接口)。SqlConnection本身实现了IDisposable,其Dispose方法内部会自动完成连接关闭、归还连接池等操作。你在注册时调用.Open()打开的连接,会在请求周期内被多个仓储共享,请求结束后由Autofac统一清理。

  • SqlConnection的原生设计逻辑:
    SqlConnection的Dispose方法会隐式触发Close(),同时释放所有关联的非托管资源,比单独调用Close()更彻底。如果手动调用Close(),一旦后续代码抛出异常,可能导致Close()无法执行,而Autofac的自动清理机制能保证即使请求过程中出现错误,Dispose也会被执行。

  • 多仓储共享连接的安全性:
    只要所有仓储都是在同一个请求生命周期内获取的该连接实例,Autofac会跟踪对象的引用情况,确保Dispose只被调用一次,不会出现重复释放导致的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:32:03