2012-09-10 25 views
3

我確實有一個建築問題(並且我不是很熟悉Castle Windsor,它被用作我的應用程序的容器)。溫莎保持跟蹤我的瞬態物體

我有一個實現工作單元設計模式的Web應用程序。 UnitOfWork實現了IDisposable接口。

我看到在的UnitOfWork處置方法完成的動作沒有特別的理由(這些行爲已經在較早的時刻somewhen完成)。

此外,我所有的組件都使用瞬態生命週期實例化。

幾乎所有組件都使用一個存儲庫實例,它也是一個臨時實例,同時也實現了一次性使用(並且沒有特別的理由)。

此外,大多數這些組件也被某些桌面應用程序使用。

我遇到的問題是內存泄漏是由於實施IDisposable接口瞬變分量,因爲我讀到這裏:http://nexussharp.wordpress.com/2012/04/21/castle-windsor-avoid-memory-leaks-by-learning-the-underlying-mechanics/

我也注意到處置任何方式從來沒有所謂的,無論從Web應用程序,也沒有來自客戶端的人(實際上發現了更多的職位,當發佈被稱爲組件將被調用)。固定的內存泄漏問題的(並且不使用NoTrackReleasePolicy!)

一種選擇是實際刪除的IDisposable的實施。 但我想這與指定NoTrackReleasePolicy類似,這可能導致比內存泄漏更大的問題(儘管我不知道如何?) - 所以這是我的第一個問題。

我也試過指定的瞬態PerWebRequest代替,但如何將是在這種情況下,桌面應用程序的組件的行爲,因爲沒有web請求\背景?這是我的第二個問題。

還有一兩件事,我不希望考慮手動呼喚我解決每一個組件版本...

較少變化的方式解決這個問題最安全\優雅\的任何想法非常感謝...

回答

5

你應該採取幾個步驟。

  1. 停止無論你做什麼

  2. learn about the tools you're trying to use, especially the part about lifestyles

  3. Make sure you're understanding why Windsor is tracking the components

  4. Make sure you're understanding why tracking is important and NoTrackingReleasePolicy is a Bad Idea™

  5. 確保您瞭解如何工作的工作單位。

現在你已經知道的一些基本知識,如果你正在尋找靈感,以怎樣的網絡解決這個看看this tutorial它展示瞭如何與溫莎在網絡上實現UOW。

在桌面上,它更復雜並且與方案相關,只要確保您不試圖在兩個應用程序之間重用您的註冊碼即可。