2010-04-10 108 views
0

已經潛伏了幾個月,並決定跳上一個問題。一般來說,我對Windsor和IoC都很陌生。我可以讓溫莎與我的MVC2項目合作,沒有任何問題。我正在使用的項目是一個MVC2項目下多個應用程序的「門戶」,使用新的Areas概念。在這種情況下,每個區域實際上將是「門戶」內的一個單獨的應用程序。我們這樣做是爲了有效地共享大量的通用代碼,視圖,身份驗證和跨應用程序功能。我們的許多應用程序都鏈接到另一個應用程序,所以在討論它將它們合併爲一個項目之後,它是有意義的。溫莎城堡與ASP.NET MVC 2地區

我在想如何做的實際上是允許不同的區域注入不同的具體類?在我有限的理解中,Application_Start負責構建容器並將其分配爲控制器工廠。我不一定要在應用程序級別進行所有注入。我們有一個配置系統,我們在每個區域的根目錄下都有一個config.xml文件,這些設置將覆蓋任何根設置。我希望通過爲Area的config.xml(類似於Webforms web.config,其中下層文件夾中的配置覆蓋父文件夾中的設置)讀取每個區域的注入來繼續這種趨勢。

例如:我會有一個ILogHandler,它需要一個不同的具體實現,具體取決於我在哪個應用程序的Area。所以我需要注入不同的東西,這取決於我在應用程序中的位置。

我可以很容易地使用工廠來做到這一點,因爲每個區域都有它自己的一套工廠,但我正試圖藉此機會瞭解IoC以及它的優點/缺點。任何幫助,將不勝感激。

+0

您是否已開始查看ControllerBuilder類和WindsorControllerFactory? – 2010-04-10 02:44:34

+0

我有(到目前爲止我的理解程度)。我查看了直接的WindsorControllerFactory和MvcContrib內的工廠。如果答案在那裏,我肯定需要做更多的研究。正如我所說,我對IoC來說是超新的。你是否建議在WindsorControllerFactory中有一種方法來動態添加組件配置文件?如果是這樣,我絕對沒有想到這一點。 – 2010-04-10 14:47:24

回答

0

只是FYI - 你絕對不能有區域特定的安全碼。例如,根據當前區域注入[Authorize]屬性的工廠或調用者可能會打開應用程序進行攻擊。

將此與MyAreaBaseController進行對比,您的區域中的所有控制器都必須進行子類化。 [授權]屬性(和其他與安全相關的代碼)在這裏是可以的,因爲它們被應用於類型並且獨立於「區域」的任何概念。

+0

同意。我們所有的安全代碼在根區域始終是常見的。我們有基本控制器,但我所談論的都不涉及安全性。實際上,我們編寫了屬於系統範圍的屬性來處理安全性,並且與IoC容器無關。我的問題是圍繞事件,日誌等域級對象。感謝您的提示! – 2010-04-10 14:43:59