gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:46:23 30 4
gpt4 key购买 nike

我有一个利用依赖注入(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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com