2016-09-08 37 views
2

叫我有一個類庫DLL稱爲AppCore存儲所有數據庫相關的訪問,幷包含所有應用程序邏輯。遲髮型在單獨的類庫的.dll從ASP.Net MVC5

此庫由ASP.Net(MVC5)應用程序使用,該應用程序爲所有數據庫訪問(通過公開方法)和應用程序特定邏輯(實體框架或DBContext未暴露於DLL外)使用該庫。

AppCore有幾種方法可能需要幾分鐘才能運行。這些方法需要從ASP.Net應用程序中調用。

我想大家都知道,在ASP.Net長時間運行的調用都是:「不,不這樣做,它會吸型的東西,你會罵爲以後做這件事」。

所以我期待到這是由等Scott Hanselman推薦給長時間運行的ASP.Net調用Hangfire.io。

現在,這裏我的問題是,如果有人知道如何將反過來被ASP.Net應用程序所消耗的類庫DLL來實現遲髮型。 AppCore.dll中有DbContext,並且它有長期運行的方法。但是這些調用將來自ASP.Net,它對數據庫沒有直接的瞭解或長時間運行的代碼邏輯。

編輯:我能想到的最好的方法是在ASP.Net應用程序中安裝Hangfire,併爲此設置一個單獨的DBContext。然而,我會喜歡將它全部放在AppCore DLL中,而不是傳播邏輯。

+0

你似乎是在右邊track.Hangfire是完美的,從ASP.net脫機任務。但是,我不確定我是否瞭解您關心的來源。你聲明該appcore。DLL擁有它自己的依賴關係,比如dbcontext等,但是你打算在你的ASP.net代碼中創建一個dbcontext。這是因爲你需要在某處注入dbcontext? –

+0

那麼我認爲Hangfire需要我在ASP.Net站點的Startup.Configuration中運行(如howto所述)。但是,由於ASP.Net不知道數據庫,所以這變得棘手。目前考慮爲Hangfire創建一個單獨的前端數據庫,並且不要「污染」核心數據庫。 – JensB

+0

如果我只是在單獨的DLL中使用hangfire,並且在ASP.Net網站的啓動過程中不做任何事情,它仍然會持續嗎? – JensB

回答

2

這裏我的問題是,如果有人知道如何實現遲髮型在 將依次通過一個ASP.Net 應用程序使用一個類庫DLL

你並不需要實現遲髮型在代碼中將最終執行by hangfire。

遲髮型將在進程內運行在ASP.net和利用後期綁定將持久地執行指定的代碼。

正在執行的代碼已經完全不知道是誰執行它,也不會在意。

在你的情況,這意味着,你通常會打電話到您的appcore.dll,你只需用一個調用替換這遲髮型排隊,然後執行任務。

比方說,你appcore.dll公開以下操作:

interface IDoSomethingBig 
{ 
    void DoSomethingBig(); 
} 

你可以告訴遲髮型通過執行此:

BackgroundJob.Enqueue<IDoSomethingBig>(x => x.DoSomethingBig()); 

其appcore.dll有任何依賴它需要被滿足將作爲執行上下文解決並排隊。