一尘不染

使用Azure WebJobs SDK进行依赖注入?

c#

问题在于,Azure WebJobs SDK仅支持将公共静态方法作为作业入口点,这意味着无法实现构造函数/属性注入。

我在WebJobs
SDK官方文档/资源中找不到有关此主题的任何信息。我遇到的唯一的解决方案是基于对这个职位描述的服务定位器(反)模式在这里

对于基于Azure WebJobs SDK的项目,有没有使用“适当的”依赖项注入的好方法?


阅读 305

收藏
2020-05-19

共1个答案

一尘不染

Azure WebJobs SDK现在支持实例方法。将此与自定义IJobActivator结合使用,可以使用DI。

首先,创建自定义的IJobActivator,它可以使用您喜欢的DI容器解析作业类型:

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的构造函数注入功能):

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);
    }
}
2020-05-19