c# - 使用 Azure WebJobs SDK 进行依赖注入(inject)?

标签 c# azure dependency-injection azure-webjobs

问题在于 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/

相关文章:

c# - 无法使用 MVVM 架构将数据绑定(bind)到文本框?

c# - 如何从 mvc3 模型的序列化 json 中获取backbone.js 模型?

c# - 在 ViewPage 中呈现的 ASP.NET MVC ViewPage

Azure Pipelines .net core 3.1 库以及对其他库的引用如何创建一个 nuget 包

azure - 如何在 Azure Web 应用程序中运行自定义 "docker"命令?

java - Dagger 2 : How to inject Map<Class<? extends Foo>, Provider<?扩展 Foo>>

c# - 使用 three.js 加载 .obj 时出现问题

azure - 集成 grafana 和 Azure 计费

c# - 使用 IoC 进行生产和测试的最佳方式

java - 什么是 DI 容器?