Dependency injection 如何在带有Azure持久功能的注入类中访问DurableEntityClient

Dependency injection 如何在带有Azure持久功能的注入类中访问DurableEntityClient,dependency-injection,azure-functions,azure-durable-functions,Dependency Injection,Azure Functions,Azure Durable Functions,我有一个利用依赖注入的Azure功能项目(`Startup.cs基于不同的接口注入服务)。那些实现接口的服务也在使用构造函数依赖项注入 在其中一个实现中,我希望对持久实体调用一个方法,但我不希望将DurableEntityClient作为方法签名的一部分(因为其他实现可能根本不需要EntityClient)。因此,我希望看到IDurableEntityClient注入到我的类的构造函数中 但结果表明该值为null。想知道这是不是有支持和可行的?(以DI友好的方式注入希望获取运行时函数Entity

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


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

但结果表明该值为
null
。想知道这是不是有支持和可行的?(以DI友好的方式注入希望获取运行时函数EntityClient的类)

一些代码片段:

Startup.cs

builder.Services.AddSingleton();
实际功能

公共类ItemWatchHttpTrigger
{
专用IReceiver\u接收器;
public ItemWatchHttpTrigger(IReceiver接收器)
{
_接收器=接收器;
}
[功能名称(“项目观察者”)]
公共异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,Route=“item/{itemId}”)]
HttpRequest请求,字符串itemId,[DurableClient]IDurableEntityClient,ILogger记录器)
{
//实际执行
}
}
参考类

公共类TableReceiver:IReceiver
{
私人IDurableEntityClient _entityClient;
public TableReceiver(IDurableEntityClient客户端)
{
_entityClient=client;//客户端为空:(
}
}

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

一些代码片段:

Startup.cs

builder.Services.AddSingleton();
builder.Services.AddDurableClientFactory();
参考类

公共类TableReceiver:IReceiver
{
私人IDurableEntityClient _entityClient;
公用表接收器(IDurableClientFactory EntityClient工厂,IConfiguration配置)
{
_entityClient=entityClientFactory.CreateClient(新的DurableClientOptions
{
TaskHub=配置[“TaskHubName”]
});
}
}

IDurableEntityClient
是作为绑定参数绑定的。我认为您不能通过DI使用inject-in构造函数。您可以在
IReceiver
方法中公开一个方法来接受
IDurableEntityClient
的调用方可以传递的
IReceiver
方法。我同意这是一个解决办法,但这不是我的选择比如,我认为,
IDurableEntityClient
是实现的一部分,不应该是接口声明的一部分。最好的方法是
DurableEntityClient.GetFromContext()
在SDKNot中,因为我没有使用它,但您似乎可以通过
services.AddDurableTask()注入
IDurableClientFactory
并检索/创建一个新的
IDurableClient
客户端。
IDurableClient
继承自
IDurableEntityClient
。请参阅。检查是否可以在从工厂检索到的对象上调用
IDurableEntityClient
公开的方法。是的,我正准备将此作为答案发布,因为我在回复github时得到了这个答案问题。我会写出来。TXT这很好,谢谢!虽然我不认为你想在参数中传递
IDurableEntityClient
,因为它未使用,在这种情况下仍然为空。谢谢,Murray-你是对的。我会更新示例代码。