如何使用 Azure Durable Functions 在注入的 class 中访问 DurableEntityClient

How to access a DurableEntityClient in an injected class with Azure Durable Functions

我有一个利用依赖注入的 Azure Functions 项目(Startup.cs 根据不同的接口注入服务)。那些实现接口的服务也使用构造函数依赖注入。

在其中一个实现中,我想在持久实体上调用一个方法,但我不希望将 DurableEntityClient 作为方法签名的一部分(因为其他实现可能根本不需要 EntityClient ).因此,我希望看到 IDurableEntityClient 注入到我的 class.

的构造函数中

但结果是 null。想知道这是否受支持且可行? (以一种 DI 友好的方式注入 class 那些想要为他们 运行 中的 Functions 运行时获取 EntityClient 的实体)

一些代码片段:

Startup.cs

builder.Services.AddSingleton<IReceiver, TableReceiver>();

实际函数

public class ItemWatchHttpTrigger
{
    private IReceiver _receiver;

    public ItemWatchHttpTrigger(IReceiver receiver)
    {
        _receiver = receiver;
    }

    [FunctionName("item-watcher")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "item/{itemId}")]
        HttpRequest request, string itemId, [DurableClient] IDurableEntityClient client, ILogger logger)
    {
        // Actual implementation
    }
}

引用class

public class TableReceiver : IReceiver
{
    private IDurableEntityClient _entityClient;

    public TableReceiver(IDurableEntityClient client)
    {
        _entityClient = client; // client is null :(
    }
}

根据我的 github 问题的答案,似乎可以在启动中注入它,因为 Microsoft.Azure.WebJobs.Extensions.DurableTask 包的 2.4.0 版本:

一些代码片段:

Startup.cs

builder.Services.AddSingleton<IReceiver, TableReceiver>();
builder.Services.AddDurableClientFactory();

引用class

public class TableReceiver : IReceiver
{
    private IDurableEntityClient _entityClient;

    public TableReceiver(IDurableClientFactory entityClientFactory, IConfiguration configuration)
    {
        _entityClient = entityClientFactory.CreateClient(new DurableClientOptions
            {
                TaskHub = configuration["TaskHubName"]
            });
    }
}

Github issue