【问题标题】:How do I pass an arbitrary argument to an Azure WebJob SDK method?如何将任意参数传递给 Azure WebJob SDK 方法?
【发布时间】:2017-10-09 07:58:12
【问题描述】:

我有一个使用触发器计划的 Azure WebJob 函数:

let resetTablesWebJob([<TimerTrigger "*/10 * * * * *">] timer:TimerInfo) =
    // do stuff
    ()

但是我也想将一些上下文信息传递到网络作业中,例如

let resetTablesWebJob([<TimerTrigger "*/10 * * * * *">] timer:TimerInfo, myData:Foo) =
    // do stuff with myData, too.
    ()

我在 SO 和其他地方看到了一些帖子,这些帖子经历了使用 DI 和 AutoFac 等执行此操作的全部麻烦 - 是否有一种更轻量级的方式来执行此操作,我可以简单地传递到JobConfig 在初始化时某个对象或值稍后将在 webjob 调用期间被绑定引擎拾取?

【问题讨论】:

  • 你可以使用独立于上下文的静态对象
  • 好的,谢谢。但我正在寻找一种方法将其作为参数传递。
  • 你不能。你必须使用 DI。

标签: f# azure-webjobs azure-webjobssdk


【解决方案1】:

你不能这样做。计时器是一个触发器,触发器会调用您的函数。没有机会与触发器一起传递参数。唯一允许的参数是触发器参数和可能从触发器派生的绑定。

相反,您可以:

  1. 引用静态变量。
  2. 使用 IJobActivator 并传递来创建类的实例,然后通过实例属性传入 arg。这是 DI 的构建块,但直接使用 IJobActivator 可以比完整的 DI 更轻量级。
  3. 使用绑定。例如,将您的参数放在一个 blob(或表、文件、redis 或您绑定到的任何其他内容)中,然后绑定到它。即在[&lt;Blob('container/blob.txt')&gt;] data :string

【讨论】:

  • 所以我想我可以创建一个自定义绑定并将其与我的元数据一起附加到 Web 作业主机?
  • 为了简单起见,我列出了它们。如果你可以使用静态,那是最简单的。 (并且鉴于您有一个计时器触发器,静态应该可以工作)。我会避免为此使用自定义绑定 - 这太过分了。
  • 谢谢,我也是这么想的。静态并不是我真正想要使用的东西——它们通常需要(或至少暗示使用)可变变量,我想说明一些更适合 FP 最佳实践的东西。
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2022-06-27
  • 2011-07-18
  • 2015-04-22
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多