当使用依赖注入时,如何异步关闭和处置Azure ServiceBusClient和ServiceBusSender单例,例如在ASP.NET中?

0x6upsns  于 2023-03-04  发布在  .NET
关注(0)|答案(1)|浏览(118)

我想在. NET 7应用程序中使用Azure服务总线,例如使用依赖项注入的ASP.NET Core Web API pr Worker Service。
官方文档建议将ServiceBusClientServiceBusSender注册为单例:
与服务交互的服务总线对象(如ServiceBusClient、ServiceBusSender、ServiceBusReceiver和ServiceBusProcessor)应注册为单例(或示例化一次并共享)进行依赖项注入。
它还指出依赖关系将并且必须由容器通过单例的IDisposable.Dispose()来处理:
容器负责清理它创建的类型,并对IDisposable示例调用Dispose。开发人员永远不应释放从容器解析的服务。如果类型或工厂注册为单例,则容器将自动释放单例。
现在,ServiceBusClientServiceBusSender的问题是它们都没有实现IDisposable,而是实现了IAsyncDisposable。我找不到任何文档说明依赖注入容器是否也会在关闭应用程序时自动调用(并等待)IAsyncDisposable.DisposeAsync()
是这样吗?
如果没有,当Services resolved from the container should never be disposed by the developer时,我应该如何处理Azure服务总线单例?

oxcyiej7

oxcyiej71#

the doc开始
对于依赖项注入,在IServiceCollection中注册服务时,将代表您隐式管理服务生存期。IServiceProvider和相应的IHost协调资源清理。具体而言,IDisposable和IAsyncDisposable的实现将在其指定生存期结束时正确释放。

相关问题