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

依赖注入中typeof与泛型AddScoped写法的差异探究

两种Scoped服务注册写法的差异&连接泄漏排查建议

写法差异结论

这两种AddScoped的写法没有功能上的区别,只是语法形式不同:

  • 第一种是用typeof()传递类型的非泛型重载写法
  • 第二种是泛型语法糖,底层最终都会执行相同的服务注册逻辑,把IServiceBusMessageSender作为Scoped服务绑定到ServiceBusMessageSender实现类

所以你遇到的Azure Service Bus连接无法关闭、资源未释放的问题,和这两种注册写法无关,得从其他方向排查:

连接泄漏的排查重点

  • 检查ServiceBusMessageSender的释放逻辑:确认你的实现类是否正确实现了IDisposable接口,是否在Dispose方法里妥善释放了依赖的ServiceBusSender或ServiceBusClient资源。Scoped服务在生命周期结束时(比如Web请求完成)会被容器自动调用Dispose,如果这个环节没做好,会导致资源泄漏。
  • 核对ServiceBusClient的注册方式:Azure官方明确推荐把ServiceBusClient注册为Singleton服务,而ServiceBusSender(或你的自定义ServiceBusMessageSender)注册为Scoped/Transient。如果ServiceBusClient被错误注册成Scoped,会每次请求都创建新的客户端实例,快速耗尽连接资源。
  • 检查异步操作的完整性:发送消息时如果没正确使用await等待异步方法完成,会导致操作挂起,相关资源无法及时释放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:15:35