Существует еще один способ использования DocumentClient.
Начиная с версии 1.0.28 файла Microsoft.NET.Sdk.Functions, теперь можно использовать класс FunctionsStartup, чтобы инициализировать DocumentClient один раз, а затем зарегистрировать его для DI (внедрение зависимости), а затем каждый раз использовать один и тот же экземпляр.
Класс FunctionsStartup задокументирован здесь . И лучшее объяснение: здесь .
В методе конфигурирования вашего стартапа соберите ваш клиент.
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyApp.Startup))]
namespace MyApp
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
IDocumentClient client = GetCustomClient();
builder.Services.AddSingleton<IDocumentClient>(client);
}
}
Затем его можно внедрить в конструктор функции и использовать методы.
public class MyFunction
{
private IDocumentClient _client;
public MyFunction(IDocumentClient client)
{
_client = client;
}
[FunctionName("MyFunction")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
// use _client here.
}
}
Когда Azure создает экземпляр этого класса для обслуживания запроса, он передает экземпляр IDocumentClient, созданный в классе FunctionsStartup.
Эта стратегия позволяет повторно использовать один и тот же экземпляр DocumentClient. Единственная особенность этого клиента не в том, чтобы сделать его статичным, а в том, чтобы мы создали его только один раз. Это также помогает с тестируемостью, поскольку тесты могут внедрить другой экземпляр IDocumentClient.