2011-08-23 93 views
4

我有一個應用程序在項目完成時發送電子郵件和傳真通知。我的實現工作正常,但需要幾秒鐘才能構建(即連接到我們的服務器)。這最終會凍結UI幾秒鐘,直到通知服務已完全構建和使用。我已經將問題推到了最後,因爲它會在最後時刻注入工廠並創建我的服務。注入創建昂貴的服務

我有什麼選擇注入需要幾秒鐘構造的外部服務?我正在考慮指示我的容器這些服務是單身人士,這隻會在每次應用程序啓動時構建一次服務。

+2

相關:http://blog.ploeh.dk/2011/03/04/ComposeObjectGraphsWithConfidence.aspx –

+1

+1 - 我在這裏問了一個類似的問題(但不是重複的):http://stackoverflow.com/questions/ 6960686/IS-的二圖案限制性-WRT昂貴-對象創建耦合與 - 不頻繁 – ckittel

回答

4

簡單的解決方案

我想給那些服務壽命更長(singleinstance)。

雖然問題是TCP連接通常會斷開連接,如果一段時間沒有發生任何事情。這意味着你需要有一些保持活躍的數據包來保持它們的開放。

更健壯的解決方案

IMHO連接建立是沒問題的。聯繫服務不應該花很長時間。您尚未指定外部服務。我猜測他們是在IIS中託管的某種Web服務。如果是這樣,請確保應用程序池不會經常回收。在IIS中啓動新的應用程序可能需要一些時間。

另一種想法是,如果你真的需要等待服務完成?爲什麼不對隊列進行排隊(由線程池或單獨的線程處理)並讓用戶繼續?如果需要,只需在服務被調用並失敗時使用消息框。

2

這些服務應該在應用程序啓動時引導,然後通過DI使用單例配置,然後將單例注入到在其構造函數中使用該類的任何類中。

我可以推薦Unity或Spring.Net。我發現Unity非常容易用於簡單注入,所以請注意一下。