Azure functions Cosmos客户端绑定还是DI?

Azure functions Cosmos客户端绑定还是DI?,azure-functions,Azure Functions,在函数应用程序中使用Cosmos客户端的推荐做法是什么- 1在函数启动类的服务集合中注册一个单例,然后构造函数将其注入函数的类中。我假设我可以使用最新的Cosmos SDK来创建它 2使用Cosmos绑定功能,如果您需要对查询进行更多控制,可以通过绑定获取客户端。这也允许您使用CosmosTrigger进行饲料加工 3混合1和2 我问的原因是Cosmos现在使用的SDK比Azure函数绑定使用的版本更新,并且有一些我想使用的功能,比如流迭代器。我很想使用选项3,即在适当的情况下同时使用注入和绑定

在函数应用程序中使用Cosmos客户端的推荐做法是什么-

1在函数启动类的服务集合中注册一个单例,然后构造函数将其注入函数的类中。我假设我可以使用最新的Cosmos SDK来创建它

2使用Cosmos绑定功能,如果您需要对查询进行更多控制,可以通过绑定获取客户端。这也允许您使用CosmosTrigger进行饲料加工

3混合1和2


我问的原因是Cosmos现在使用的SDK比Azure函数绑定使用的版本更新,并且有一些我想使用的功能,比如流迭代器。我很想使用选项3,即在适当的情况下同时使用注入和绑定,但它不会创建两个singleton Cosmos客户端—一个用于3.*sdk DI,一个用于2.*用于绑定吗?坏吗?如果我使用选项1并使用我自己的注入式客户端,CosmosTrigger还会需要旧的sdk客户端吗?

绑定纯粹是为了方便起见,幕后正在做您在1中描述的事情。因此,如果您想要使用较新版本的SDK,或者想要更多地控制事物的实例化方式,请使用1。你不会因此失去任何东西


触发器略有不同,只是因为它必须使用包含的SDK来触发函数。因此,在本例中,函数宿主将在幕后启动一个CosmosClient,并使用它来提取消息。虽然它可以与指定的较新版本一起工作,但需要注意的是,它也可能会在本地和云中中断,所以您应该能够非常快地确认。因此,一般来说,如果将其用作输入或输出绑定,则完全可以使用您想要的任何版本的SDK。如果您使用的是for trigger,建议您坚持使用扩展插件拉入的版本,理想情况下,扩展插件应该经常更新,以提供最新版本的SDK

但如果我使用CosmosDb触发器,它会基于旧sdk创建自己的客户端,不是吗?也许这没什么大不了的,只是想确保我没有把不同的SDK混为一谈。是的,你是对的。在幕后,它将尝试创建自己的客户端。甚至有可能,如果您引入了一个更新的版本,扩展可能会抛出一些错误,如果它不兼容的话。因此,触发器确实不太像“只是一种方便”。但幸运的是,扩展也可以进行版本控制,因此理想情况下,cosmos trigger也会发布最新版本的更新。因此,如果您需要在功能应用程序中使用cosmos trigger(可在WebJobs.extensions.CosmosDB中找到),那么最好的做法是坚持使用扩展当前使用的cosmos SDK 2.3的任何版本,对的WebJobs.Extensions.CosmosDB和Azure.Cosmos依赖项同时存在可能会导致冲突,除非两者都依赖于相同的sdk版本。好的,thx-如果您想更新答案以反映上述评论,我将接受它,否则我们可以保持原样。另外,我知道你们是AF团队的成员,所以如果你们能够更新WebJobs.Extensions.CosmosDB以使用更新的sdk,那也太棒了:是的,那太棒了-也更新了我的答案,是的,有一个工作项将这些扩展升级到最新和最好的SDK版本,刚刚完成将事件中心和服务总线升级到最新版本的工作