我们应该对从 C# 中的 Microsoft.Rest.ServiceClient 派生的客户端使用单例吗?

sol*_*ngJ 6 .net c# azure autorest

使用从 swagger 规范(例如与 Azure 资源管理器相关联的规范)生成的 Azure .NET SDK 时,生成的库利用 Microsoft AutoRest 客户端运行时和各种“客户端”,所有这些“客户端”都继承自“ServiceClient”。

我们一直在使用 DocumentDB Client,并阅读了很多关于在 .NET 中使用本机 HttpClient 的问题。Microsoft 建议对这两个客户端使用单例模式,因为它们在内部是如何工作的,尽管使用单例模式存在众所周知的问题。在这些情况下,这是必要的。

因此,我们为这些情况制定了使用和管理单例的策略,因此我们想知道是否应该对派生自 ServiceClient 的 Azure REST 客户端使用相同的策略。如果它使用 HttpClient 就有意义了。

注意:这个问题不是寻求关于单例或客户端的一般开发人员建议的问题,而是针对与 AutoRest 客户端运行时相关的 Microsoft 开发团队基于其内部工作原理的知识的特定问题。

Bru*_*ton 1

是和不是。:-) 您不需要使用 Singleton 设计模式,但建议ServiceClient尽可能共享派生实例,因为每个实例都封装了一个HttpClient.

对于某些 Azure 库,共享单个客户端并不总是可行。例如,SearchIndexClientAzure 搜索库一次只能定位一个索引,因此,如果您的应用程序使用多个索引,则需要以某种方式对它们进行池化。这是与此主题相关的一个相关问题,其中包含其他地方的其他讨论的链接。