dependency-injection - 如何使用 Azure Durable Functions 访问注入(inject)类中的 DurableEntityClient

标签 dependency-injection azure-functions azure-durable-functions

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

在其中一个实现中,我想在 Durable Entity 上调用一个方法,但我不想让 DurableEntityClient 成为方法签名的一部分(因为其他实现可能不需要 EntityClient全部)。因此,我希望看到 IDurableEntityClient 被注入(inject)到我的类的构造函数中。

但事实证明该值为 null。想知道这是否受支持且可行? (以一种 DI 友好的方式注入(inject)类,这些类希望为它们运行的​​ 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
    }
}

引用类

public class TableReceiver : IReceiver
{
    private IDurableEntityClient _entityClient;

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

最佳答案

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

一些代码片段:

Startup.cs

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

引用类

public class TableReceiver : IReceiver
{
    private IDurableEntityClient _entityClient;

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

Github issue

关于dependency-injection - 如何使用 Azure Durable Functions 访问注入(inject)类中的 DurableEntityClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65326792/

相关文章:

Javascript IoC/DI 框架

azure - Terraform 部署的 azure 函数无法与 FUNCTIONS_WORKER_RUNTIME python 设置一起使用

c# - IBinder 的模拟在单元测试事件功能时失败

dependency-injection - 如何将反射器传递给 Nest.js 全局守卫?

c# - 在 ASP.NET Core 的中间件中注入(inject)服务

c# - 持久功能无法启动

azure - 如何将 API 响应写入 Azure Blob 存储

Azure Durable Function HttpStart 失败 : Webhooks are not configured

azure - Azure Durable Functions 是否支持 .NET 6 和 Azure Functions 版本 4?

java - Google Guice 3 有什么新功能?