2017-10-09 95 views
1

我有使用Trigger時間表中的天青WebJob功能:如何將任意參數傳遞給Azure WebJob SDK方法?

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

但是我想通過一些相關的背景信息,以及到所述webjob例如

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

我已經看到了SO和其他地方的一些帖子,通過與DI和AutoFac等等,等等這樣做的整個麻煩去 - 有沒有這樣做,在那裏我可以簡單的一個稍微更輕巧的方式在初始化時傳入JobConfig某個對象或值,稍後在Webjob調用期間由綁定引擎拾取對象或值?

+0

如果獨立於上下文,則可以使用靜態對象 – Thomas

+0

是的,謝謝。但我正在尋找一種將它作爲參數傳遞的方法。 –

+1

你不能。你必須使用DI。 – Thomas

回答

1

你不能這樣做。計時器是一個觸發器,觸發器會調用你的函數。沒有機會與觸發器一起傳遞爭論。唯一允許的參數是可能從觸發器派生的觸發器參數和綁定。

相反,您可以:

  1. 參考靜態變量。
  2. 使用IJobActivator並通過創建類的實例,然後通過實例屬性傳遞參數。這是DI的構建模塊,但直接使用IJobActivator可以比完整的DI更輕。
  3. 使用綁定。例如,將您的參數放在一個blob(或表,或文件,或redis,或任何其他綁定的內容)中,然後綁定到它。即,在[<Blob('container/blob.txt')>] data :string
+0

因此,我想我可以創建一個自定義綁定,並將其附加到網絡作業主機與我的元數據? –

+0

我按照簡單的順序列出了它們。如果你可以使用靜態,這是最簡單的。 (並且假設你有一個定時器觸發器,靜態應該可以工作)。我會爲此避免一個自定義綁定 - 這是矯枉過正。 –

+0

謝謝,我也這麼想。雖然靜態數據並不是我想要使用的東西 - 它們通常需要(或者至少暗示使用)可變變量,我想說明一些更適合FP最佳實踐的東西。 –