我正在创建一个新的Azure功能,它将发送电子邮件通知。此功能首先需要从CosmosDB获取用户的电子邮件地址。我有一个CosmosDB客户端包装类。
如何创建CosmosDB客户端的单例实例并在Azure函数中使用它?我想像下面的代码可以创建一个实例,但我怎么能把它变成单身?
public static class MyFunction
{
public static IConfiguration Configuration { get; }
public static Clients.CosmosDb.CosmosDbClient _cosmosDbClient;
[FunctionName("MyFunction")]
public static void Run([QueueTrigger("my-queue", Connection = "AzureWebJobsStorage")]string myQueueItem)
{
// Create CosmosDb Client
Initialize();
// Call CosmosDB
_cosmosDbClient.Read();
}
private static void Initialize()
{
if (_cosmosDbClient == null)
_cosmosDbClient = new Clients.CosmosDb.CosmosDbClient(Configuration);
}
}
答案 0 :(得分:2)
最简单的方法是用静态构造函数替换Initialize
:
static MyFunction()
{
// load configuration?
_cosmosDbClient = new Clients.CosmosDb.CosmosDbClient(Configuration);
}
答案 1 :(得分:0)
使用here中的DocumentClient的示例代码 funcion.json
{
"type": "documentDB",
"name": "client",
"connection": "myconnection_DOCUMENTDB",
"direction": "in"
}
C#功能
#r "Microsoft.Azure.Documents.Client"
using System;
using Microsoft.Azure.Documents.Client;
public static void Run(string input, DocumentClient client, TraceWriter log)
{
// client has connection string already set up based on binding
}
我们还在Extensions SDK中定义了一个CosmosDB属性。您可以使用此属性访问CosmosDB客户端。以下是通过CosmosDB属性访问DocumentClient的sample code。您可以通过Precompiled Functions in C#进行尝试。使用属性提供的DocumentClient将确保重用连接。