2010-04-10 105 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