我想在. NET 7应用程序中使用Azure服务总线,例如使用依赖项注入的ASP.NET Core Web API pr Worker Service。
官方文档建议将ServiceBusClient
和ServiceBusSender
注册为单例:
与服务交互的服务总线对象(如ServiceBusClient、ServiceBusSender、ServiceBusReceiver和ServiceBusProcessor)应注册为单例(或示例化一次并共享)进行依赖项注入。
它还指出依赖关系将并且必须由容器通过单例的IDisposable.Dispose()
来处理:
容器负责清理它创建的类型,并对IDisposable示例调用Dispose。开发人员永远不应释放从容器解析的服务。如果类型或工厂注册为单例,则容器将自动释放单例。
现在,ServiceBusClient
和ServiceBusSender
的问题是它们都没有实现IDisposable
,而是实现了IAsyncDisposable
。我找不到任何文档说明依赖注入容器是否也会在关闭应用程序时自动调用(并等待)IAsyncDisposable.DisposeAsync()
。
是这样吗?
如果没有,当Services resolved from the container should never be disposed by the developer
时,我应该如何处理Azure服务总线单例?
1条答案
按热度按时间oxcyiej71#
从the doc开始
对于依赖项注入,在IServiceCollection中注册服务时,将代表您隐式管理服务生存期。IServiceProvider和相应的IHost协调资源清理。具体而言,IDisposable和IAsyncDisposable的实现将在其指定生存期结束时正确释放。