【问题标题】:ASP.NET MVC3 Dependency Injection In Unity - UnityDependencyResolver vs. IControllerFactoryUnity 中的 ASP.NET MVC3 依赖注入 - UnityDependencyResolver 与 IControllerFactory
【发布时间】:2012-02-28 09:17:06
【问题描述】:

上下文:在 (C#) ASP.NET MVC3 框架中使用 Unity。

Mark Seemann 建议“在 ASP.NET MVC 应用程序中,它是 global.asax 和自定义 IControllerFactory” - (Source)。

我已阅读其他可靠来源建议使用 UnityDependencyResolver(MSDNAdam TuliperDarin Dimitrov)。

Darin也暗示两者互斥。

哪种方式是最佳实践?

【问题讨论】:

标签: asp.net-mvc-3 dependency-injection unity-container


【解决方案1】:

MVC 3 引入了一种新的方法来处理依赖注入,称为 IDependencyResolver。在 MVC 3 之前的 MVC 中,您将使用 IControllerFactory。在 MVC 3 中,您将使用 UnityDependencyResolver。

UnityDependencyResolver 是 IDependencyResovler 接口的一个实现。这允许将 Unity 集成到 .net 中,而无需编写自定义 IControllerFactory。

它们是相互排斥的,因为如果你使用一个,你就不会使用另一个。

【讨论】:

  • 感谢您的回复。 Mark 继续谈到 IDependencyResolver “在概念层面上,IDependencyResolver 的预期用途是作为服务定位器,这就是框架使用它的方式。”关于 IDependencyResolver 的建议,他直接声明要避免它“在当前的化身中,我发现忽略 IDependencyResolver 更安全、更正确。”,并使用 IControllerFactory。那么,您的回答是否暗示 Unity 只能用作服务定位器,或者是否可以将 Unity 与自定义 IControllerFactory 一起使用?
  • @TravisJ - 我不熟悉他的理由,但我相信他有好的理由。尽管如此,DependencyResolver 对大多数人来说都很好。 IDependencyResolver 用于整个框架,而不仅仅是控制器。不使用 IDependencyResolver 意味着必须做更多的工作。是的,您可以将它们一起使用,因为您自己的 IControllerFactory 不会使用 DependencyResolver,但框架的其他部分会。如果我真的需要它,我仍然只会使用自定义的 IControllerFactory。您还冒着拥有多个容器的风险,这可能很糟糕。
  • 不要成为完美主义者,但除了声称它是“最佳实践”之外,使用 IDependencyResolver 有什么好处?对我来说,这似乎是一种更复杂的方法,可以通过 IControllerFactory 更简单地实现。
  • 框架内部所做的不应该成为支持或反对的论据。论点应基于一个或另一个选项是否为自己的代码增加了好处。对于 DependencyResolver,我没有看到这种情况发生 - 事实上,它非常阴险:stackoverflow.com/a/5654204/126014
  • IDependencyResolver 接口已损坏,因为它没有 Release 机制。使用它会导致无法修复的内存泄漏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多