在Azure Functions中初始化单例客户端的位置

时间:2017-12-23 20:41:28

标签: azure-functions

我正在创建一个新的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);
    }
}

2 个答案:

答案 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将确保重用连接。