在.NET依赖注入场景下如何异步处置Azure ServiceBusClient单例?
.NET 7依赖注入中Azure Service Bus单例的异步处置问题
核心问题解答
.NET 7的依赖注入容器(ASP.NET Core、Worker Service所用的默认容器)会自动调用并等待单例服务的IAsyncDisposable.DisposeAsync()方法,在应用正常关闭的阶段完成清理工作,完全符合你提到的“容器负责处置依赖”的官方要求。
补充说明
- 从.NET 6开始,官方DI容器就已经完善了对
IAsyncDisposable的支持,不再只局限于IDisposable。对于注册为单例的ServiceBusClient和ServiceBusSender,容器会在应用终止时触发异步清理流程,自动等待所有异步可处置单例完成资源释放。 - 不需要手动调用
DisposeAsync(),严格遵循官方文档的要求:不要自行处置从容器解析出来的服务,容器会全权负责。 - 只要你是通过标准方式注册单例(比如
services.AddSingleton<ServiceBusClient>(sp => new ServiceBusClient(connectionString)),或者Azure SDK提供的AddServiceBusClient扩展方法),就不需要额外做任何处置相关的代码。
内容的提问来源于stack exchange,提问作者Joerg
相关产品推荐
相关产品推荐

