在最近隔离东西并通过 NuGet 插入的精神中,有没有人知道如何将依赖解析器限制在 MVC3 中的一个区域?将视图和控制器限制在一个区域很容易,但除非我没有看到明显的钩子,否则设置 IDependencyResolver 似乎不可避免地具有全局范围。我想把它限制在一个区域。
有什么建议么?
在最近隔离东西并通过 NuGet 插入的精神中,有没有人知道如何将依赖解析器限制在 MVC3 中的一个区域?将视图和控制器限制在一个区域很容易,但除非我没有看到明显的钩子,否则设置 IDependencyResolver 似乎不可避免地具有全局范围。我想把它限制在一个区域。
有什么建议么?
IDependencyResolver
在设计上是全球性的。如果您想按区域改变行为,您应该查看可以根据上下文对象做出决策的各种 *Activator 类型和接口。
你具体想做什么?
我建议为此使用公共服务定位器。基本上每个区域都可以为其特定容器设置 CSL。
您可能需要在依赖解析器之间创建一个适配器,或者完全放弃它并严格使用 CSL。
一般来说,我不支持在业务应用程序中使用 CSL。其目的是让使用 DI 的开源组件(如 MassTransit)更容易集成到业务线应用程序中。然而,这可能是一个例外。
另外,查看 mvccontrib 可移植区域。它是为这种类型的东西设计的。
你正在尝试做的事情听起来是个坏主意。依赖注入的意义在于,您可以隔离特定的依赖项,而无需关注它们的来源。
如果您尝试将某些对象或类限制到某个 MVC 区域,请配置您的依赖注入器以在正确的时间调用正确的。
有关您正在尝试做的事情的更多详细信息将有助于生成更好的答案。