2016-07-06 49 views
6

我想使用Quartz作爲腳本調度程序,從GUI編寫VB,然後選擇一個觸發器,然後在觸發器上編譯和執行代碼,難點是如何處理它以便它在應用程序上下文中運行此腳本,以便它可以訪問我的實體框架模型等。我將如何實現這一目標?Quartz在運行時編譯作業腳本?

+0

自從我使用Quartz(我假設你的意思是Quartz.net)已經很長時間了,但是iirc除了一些字符串數據之外不能注入任何東西進入石英工作。我之前解決這個問題的方式是通過從被執行的作業中訪問全局狀態(通過我的IoC或靜態變量),這感覺非常混亂。我不知道如果石英現在有DI支持,但我猜它不是:( – cwap

+0

@cwap當然,這將工作,但字符串可能是一些VB執行? –

+0

它可能會,但字符串將需要根據你的石英儲存設置和字符串長度,這可能是一個問題。查看JobDataMap(http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/more-這個問題是所有的石英工作都必須完全可序列化到石英數據模型中,所以動態數據和集合是不可行的。我猜像腳本可以工作,儘管我會親自選擇在其他地方構建腳本存儲,就像在文件系統上的單獨數據庫或文件夾中一樣。 – cwap

回答

4

基本上你需要的是把Quartz.Server放在你的應用程序之上。將此項目添加到您的解決方案。

如果您只需要在石英作業中使用您的實體,然後添加您的項目作爲Quartz.Server的參考,並像您在主應用中一樣使用實體。

如果您使用某個IoC容器,那麼您可以使用擴展名this將依賴注入到作業中。或者您可以編寫自己的SchedulerFactory和JobFactory,並在此構建您的作業環境。

+0

嗨阿列克謝,我在這方面取得了一些進展,請你看看我的其他問題? http://stackoverflow.com/questions/38309777/accessing-local-types-from-script-executed-with-vbcodeprovider –