问题在于 Azure WebJobs SDK 仅支持公共(public)静态方法作为作业入口点,这意味着无法实现构造函数/属性注入(inject)。
我无法在官方 WebJobs SDK 文档/资源中找到有关此主题的任何内容。我遇到的唯一解决方案是基于这篇文章 here 中描述的服务定位器(反)模式。 .
是否有一种好方法可以为基于 Azure WebJobs SDK 的项目使用“正确的”依赖项注入(inject)?
最佳答案
Azure WebJobs SDK 现在支持实例方法。将此与自定义 IJobActivator 相结合,您可以使用 DI。
首先,创建可以使用您最喜欢的 DI 容器解析作业类型的自定义 IJobActivator:
public class MyActivator : IJobActivator
{
private readonly IUnityContainer _container;
public MyActivator(IUnityContainer container)
{
_container = container;
}
public T CreateInstance<T>()
{
return _container.Resolve<T>();
}
}
您需要使用自定义 JobHostConfiguration 注册此类:
var config = new JobHostConfiguration
{
JobActivator = new MyActivator(myContainer)
};
var host = new JobHost(config);
然后,您可以使用一个带有实例方法的简单类来完成您的工作(这里我使用 Unity 的构造函数注入(inject)功能):
public class MyFunctions
{
private readonly ISomeDependency _dependency;
public MyFunctions(ISomeDependency dependency)
{
_dependency = dependency;
}
public Task DoStuffAsync([QueueTrigger("queue")] string message)
{
Console.WriteLine("Injected dependency: {0}", _dependency);
return Task.FromResult(true);
}
}
关于c# - 使用 Azure WebJobs SDK 进行依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30328775/