我有一个利用依赖注入(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"]
});
}
}
关于dependency-injection - 如何使用 Azure Durable Functions 访问注入(inject)类中的 DurableEntityClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65326792/