2017-02-01 81 views
3

我知道Func<T>Func<Owned<T>>不同,我知道如何注入每種類型的依賴關係。然而,我經常感到困惑,因爲我在什麼時候比較喜歡一個呢?Func <Owned<T>> vs Func <T> dependency

假設,我有一個應用程序遵循MVP模式,我想注入一個視圖PrintView。那麼,我應該以什麼理由決定將視圖注入Func<PrintView>Func<Owned<PrintView>>

回答

6

Func<T>將解析生命週期範圍中的項目,該項目將在生命週期範圍發佈時處理。例如,MVC控制器的情況:

  • 控制器從請求生存期範圍解析。
  • 調用Func<T>將從請求生存期範圍中解析出T
  • 處理請求生命週期範圍時,控制器和任何T實例將與請求範圍一起處理。

Owned<T>意味着你正在服用明確爲T實例的處置責任。 Func<Owned<T>>將從生命週期範圍獲得Owned<T>

  • 控制器從請求生存期範圍解析。
  • 調用Func<Owned<T>>將從請求生存期範圍中解析出Owned<T>
  • 處理請求使用期限範圍時,控制器被處理,但Owned<T>實例爲未處置。您需要自己在控制器或應用程序代碼中的某處進行某種清理。

Owned<T>真的只有在你想控制事物處置的時間時纔有意思。如果你不在乎或者希望終生處理範圍的處置能夠爲你處理,那就沒有意思了。

+0

在Visual Studio中有什麼方法/工具可以監視組件的生命週期嗎?謝謝! –

+0

不,但是如果你做了一些搜索,那麼在這裏有關於如何在引發各種Autofac事件時登錄的問題。這可能有幫助。 –

+0

好的。我認爲現在就足夠了。謝謝。 –

相關問題