Внедрение зависимостей в функции .NET Azure - Клиент Azure Cosmos DB - PullRequest
2 голосов
/ 29 мая 2019

Я прочитал статью в Документах Microsoft об использовании внедрения зависимостей в .NET Azure Functions .

Все отлично работает, как видно из статьи, регистрируется CosmosClient

builder.Services.AddSingleton((s) => {
     return new CosmosClient(Environment.GetEnvironmentVariable("COSMOSDB_CONNECTIONSTRING"));
    });

Вопрос в том, как я могу использовать Cosmos Client в своей функции? Я не хочу каждый раз создавать экземпляр Cosmos Client.

public  class CosmosDbFunction
{
    public CosmosDbFunction()
    {

    }

    [FunctionName("CosmosDbFunction")]
    public  async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        // TODO: do something later
        return null;
    }
}

1 Ответ

4 голосов
/ 29 мая 2019

У вас нет для использования интерфейса. Вы можете просто ввести CosmosClient напрямую.

Пример этого есть в каталоге примеров клиента Cosmos , который включает следующий код:

private CosmosClient cosmosClient;
public AzureFunctionsCosmosClient(CosmosClient cosmosClient)
{
    this.cosmosClient = cosmosClient;
}

Похоже, что для тестирования команда, создающая этот клиент, выбрала подход, делающий все абстрактное / виртуальное, чтобы позволить имитационным фреймворкам переопределять методы по мере необходимости. Это затронуто в выпуске # 303 . Смотрите также на Переполнение стека: Как мне насмехаться над классом без интерфейса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...