有沒有人有任何經驗積分autofac和Quartz.Net?如果是這樣,那麼最好在哪裏最好控制生命週期管理 - IJobFactory,在IJob的執行中,還是通過事件監聽器?Autofac和Quartz.Net集成
現在,我使用的是自定義的autofac IJobFactory
創建IJob
實例,但我沒有一個簡單的方法來插入到ILifetimeScope
在IJobFactory確保注入任何昂貴的資源在IJob被清理。作業工廠只是創建一個作業的實例並將其返回。這裏是我的想法電流(希望有更好的...)
它看起來像最AutoFac集成莫名其妙地裹
ILifetimeScope
圍繞他們所創造的工作單元。明顯的蠻力的方式似乎是通過ILifetimeScope
到IJob
,並有Execute
方法創建一個孩子ILifetimeScope
並實例化任何依賴關係。這似乎與服務定位器模式有點太接近了,這反過來似乎違背了autofac的精神,但它可能是確保正確處理範圍的最明顯的方式。我可以插入一些Quartz事件來處理Job執行堆棧的不同階段,並處理那裏的生命週期管理。這可能會做更多的工作,但如果它能更清晰地分離問題,可能值得。
確保一個IJob是圍繞
IServiceComponent
型,這將做好各項工作的簡單包裝,並要求其爲Owned<T>
,或Func<Owned<T>>
。我喜歡這個看起來更像autofac,但我不喜歡它對於IJob的所有實現者都不是嚴格可執行的。
感謝您抽出時間回覆。我喜歡這個想法,因爲它是原始問題中我的第三次頭腦風暴的更加明確的版本。還有什麼讓我感到困惑的是,我無法控制一生的範圍。基本上,我想在自己的LifetimeScope中運行每個IJob,幾乎就像WCF服務調用的等價物。不幸的是Quartz`IJobFactory`非常火,忘記了我所能說的,所以如果我真的想要明確的範圍邊界,我不得不深入Quartz監聽器系統。 – 2011-02-07 20:08:41