如何选择DI容器?

时间:2012-02-25 01:04:52

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

  

可能重复:
  How do the major C# DI/IoC frameworks compare?

有很多DI容器,我觉得有点丢失。我是DI模式的新手。

我正在阅读这本书Dependency Injection in .NET,我发现DI在改进代码库方面非常有用,使其松散耦合并且更易于测试。

我现在想为我的虚拟项目引入一个DI容器,但是有很多可供选择。

我如何选择Castle Windsor,Unity,StructureMap,Spring.NET,Autofac,Ninject,Funq,LinFu等等?

我想一个连贯的观点是“只选一个”并开始使用它(因为我认为它们很容易互换,特别是在早期阶段),但我想做出更明智的决定。 / p>

6 个答案:

答案 0 :(得分:5)

这就像买车一样。你可能会喜欢丰田,但它只是2.5L发动机。你可能会喜欢法拉利,但它太红了。你可能会喜欢马自达,但你的老板不允许你开车。你可能会喜欢悍马,但是你的同事会嘲笑你。根据您的口味混合制造商,对于某些人或在某个不同的时刻总会有某些东西缺失。

我的看法 - 首先,DI通常比没有DI更好。挑选任何东西,你会变得更好。我会选择一些:

  • 在社区中有很好的支持(所以你可以得到答案)
  • 有一个很好的支持公司(所以你不能在它破产时重写你的代码)
  • 感觉很好(所以你不要在孩子面前发誓,不要冷静)。
  • 对项目来说不是一件坏事
  • 不只是DI,而且提供了一个生态系统,可以减少你花在你知道自己可以做的任务上的时间,而不是现在 - 然后你可以专注于重要的事情
  • 被很多人使用(所以你知道许多部分也在现实生活中进行测试并且填充了错误)
  • 不是5岁(例如文档说它在Windows 98或其他东西上支持)

我的2美分 - http://www.springframework.net/。我的意思是,他们documentation contents page就像20页长......

或者您可能想要查看类似问题的更多答案:

答案 1 :(得分:2)

您可以从MVC3中的内置DependencyResolver开始。稍后您可以轻松升级到Enterprise Library Unity DI。

Brad Wilson在How to use DI in MVC3上提到了一系列帖子。

答案 2 :(得分:0)

我的立场是,看看几个 - 你已经获得了优秀的“.NET中的依赖注入”一书(我将添加Ninject,但不幸的是,书中没有提到) - 然后选择其中一个是你最了解的,就像语法一样。开始使用高级功能并不重要,只是你开始

一旦你有一个IoC容器,替换它应该是微不足道的,因为你所有的更改将在一个地方 - 聚合根 - 而不是遍布你的代码库。如果您还没有使用IoC容器,也会强制您设计依赖注入,这将对您的项目产生更大的影响。

答案 3 :(得分:0)

我一直在使用Ninject和Unity。当您将Unity MVC添加到Unity时,代码会让我想起Ninject代码。

两者都很容易实现。两者都允许用启动器类中心替换以配置文件为中心。

我建议创建一个2小时的项目,并在每个ioc di框架中实现它,并根据经验决定你喜欢哪一个。但是,如果您在不查看其他功能的情况下执行此操作,您可能会发现错过了某些内容。因此,请查看外围功能,例如第三方支持。

答案 4 :(得分:0)

除了其他好评之外 - 如果您安装Unity.MVC3软件包,请注意如果您希望随每个请求处理对象,则必须使用HierarchicalLifetimeManager。它工作得很好但我认为你会发现在大多数情况下所有主要的都很好。

您的问题是找到适合您环境的产品。有些地方允许开源,有些地方不允许,在这种情况下Unity会胜出。

答案 5 :(得分:-5)

用于.NET的最发达的DI容器是Managed Extensibility Framework (MEF),我强烈建议您使用它。 MEF在团队中快速,简单且易于维护,并具有完美的学习曲线。