我一直在爲我的基於Web的應用程序使用Windsor IoC容器,以解決應用程序應該使用的數據訪問層實現。MEF:我應該在哪裏放置CompositionContainer?
Web應用程序的用戶界面將包括頁面,每個頁面由小單位稱爲portlet。 (它們的概念有點類似於小部件。)這些所謂的portlet基本上是web控件,可以在運行時爲每個頁面單獨配置。
應用程序將有一些附帶這些內置的,但我想能很容易地擴展它。
我發現這個機制正是MEF的目的所在。所以我決定以一種使用MEF發現portlet的方式來實現系統。然後,我意識到它也可以做我目前使用Windsor的東西,所以我決定讓溫莎支持MEF。
很顯然,我將不得不使用DirectoryCatalog,它會掃描應用程序的bin文件夾中的.dll,並返回我需要的一切。
我看了一些教程,範例和關於StackOverflow的MEF的所有問題,以及。我認爲使用MEF的最簡單方法是通過Glenn Block在他的教程中提到的PartInitializer,但我意識到它不在MEF中。實際上,它是在我從CodePlex下載的代碼中,但在一個單獨的程序集中,並且僅在源代碼中,而不是以二進制形式。 (這是否意味着它不是MEF的一部分?或者將它放到一個單獨的項目中有什麼意義?)然後,我意識到它是用於Silverlight的,所以它並不能真正幫助我。 (或者我應該只是將它編譯爲.NET 3.5,或者將其包含在我的項目中,而且我很好走?)
所以現在我遇到了一個問題:哪裏應該放置CompositionContainer在我的應用程序?
還有就是我想考慮的另一件事:我應該在應用程序的生命週期只用一個CompositionContainer中,還是我最好的每一次創建一個容器,當我需要它?