还有另一种使用 DocumentClient 的方法。
从 Microsoft.NET.Sdk.Functions 版本 1.0.28 开始,现在可以使用 FunctionsStartup 类初始化 DocumentClient 一次,然后将其注册为 DI(依赖注入),然后每次都使用相同的实例。
FunctionsStartup 类已记录here。更好的解释是here.
在 Startup 的配置方法中,构建您的客户端。
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 创建此类的实例来服务请求时,它会传递在 FunctionsStartup 类中创建的 IDocumentClient 实例。
这一策略允许重复使用同一 DocumentClient 实例。这个客户端的单一性不是通过使其静态来强制的,而是通过确保我们只创建它一次。这也有助于提高可测试性,因为测试可以注入 IDocumentClient 的不同实例。