Asp.net 如何将依赖项解析器隔离到MVC3中的一个区域?

Asp.net 如何将依赖项解析器隔离到MVC3中的一个区域?,asp.net,asp.net-mvc,dependency-injection,asp.net-mvc-areas,Asp.net,Asp.net Mvc,Dependency Injection,Asp.net Mvc Areas,在最近隔离东西并通过NuGet将其插入的精神中,有人知道如何将依赖项解析器限制在MVC3中的一个区域吗?将视图和控制器限制在一个区域很容易,但除非我没有看到明显的挂钩,否则设置IDependencyResolver似乎不可避免地具有全局范围。我想把它限制在一个区域 有什么建议吗?IDependencyResolver在设计上是全局的。如果您想按区域改变行为,您应该查看各种*激活器类型和接口,它们可以根据上下文对象做出决策 你具体想做什么?你想做什么听起来是个坏主意。依赖项注入的意义在于,您可以隔

在最近隔离东西并通过NuGet将其插入的精神中,有人知道如何将依赖项解析器限制在MVC3中的一个区域吗?将视图和控制器限制在一个区域很容易,但除非我没有看到明显的挂钩,否则设置IDependencyResolver似乎不可避免地具有全局范围。我想把它限制在一个区域


有什么建议吗?

IDependencyResolver
在设计上是全局的。如果您想按区域改变行为,您应该查看各种*激活器类型和接口,它们可以根据上下文对象做出决策


你具体想做什么?

你想做什么听起来是个坏主意。依赖项注入的意义在于,您可以隔离特定的依赖项,而不必担心它们来自何处

如果您试图将某些对象或类限制在某个MVC区域,请配置依赖项注入器,以便在正确的时间调用适当的对象或类


关于您尝试执行的操作的更多详细信息将有助于生成更好的答案。

我建议为此使用公共服务定位器。基本上,每个区域都可以为其特定的容器设置CSL

您可能需要在依赖项解析器之间创建一个适配器,或者完全放弃它,严格使用CSL

总的来说,我不是在商业应用程序中使用CSL的支持者。它的目的是使使用DI(如MassTransit)的开源组件更容易集成到业务线应用程序中。然而,这可能是一个例外


另外,查看mvccontrib便携区。它是为这种类型的东西设计的。

这一点都不坏。如果你想把一个由几个应用程序组成的网站拼凑起来,每个应用程序都使用自己的DI容器,这正是你想要实现的。@Jeff:依赖项注入的思想是在一个地方完成依赖项解析。例如,使用冲突解决程序创建一个依赖于
enableusercontroller
ValidateUserController
,该命令依赖于
IMailSender
IUnitOfWorkFactory
等。冲突解决程序将立即创建该图。当您使用已经依赖于特定框架的不同应用程序时,您没有太多选择。你需要这些框架。对于某些应用程序来说,可行的方法是将这些框架路由到所选的fx。我知道设计模式是什么。环顾四周,你可能会发现我在开源项目中使用它的例子。我不认为你在听我关于让不同的应用程序生活在一起的观点,每个应用程序都有自己的谨慎架构。想象一下你有一个论坛作为一个区域来实现。它使用Ninject。您还可以将某种照片库作为一个区域来实现。它使用结构图。换句话说,你正在把各种各样的开源项目快速地整合到一个站点上。区域实际上是一个路由特性,而不是一个安全或配置特性。基于这一事实,您的每个领域都需要提供自己的独立DI方式(提供这种方式的*Activator类)。