如何选择DI容器?

可能重复:
主要的C#DI / IoC框架如何比较?

有这么多的DI容器,我感觉有点失落。 我是DI模式的新手。

我正在阅读.NET中的依赖注入(Dependency Injection)一书并且我发现DI在改进代码库方面非常有用,使它更加松散耦合,并且更具可测试性。

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

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

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


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

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

  • 在社区有很好的支持(所以你可以得到答案)
  • 在它背后有一个很好的支持公司(所以你在破产的时候不要重写你的代码)
  • 感觉对你很好(所以你不要在孩子面前发誓,不要冷静)
  • 对于这个项目来说这不是一个过度的冲击
  • 不仅仅是DI,而且提供了一个生态系统,可以减少你花费在你知道你可以做的任务上的时间,而不是现在 - 然后你可以专注于重要的事情
  • 被很多人使用(所以你知道很多零件也在现实生活中被测试并且填充了错误)
  • 不是5岁(例如文档说它支持Windows 98或其他)
  • 我的2美分 - http://www.springframework.net/。 我的意思是,他们的文档内容页面长达20页...

    或者你可能想看一些类似问题的更多答案:

  • 哪些.NET依赖注入框架值得研究?

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

    Brad Wilson提到了一系列关于如何在MVC3中使用DI的文章。


    我的立场是,看看几个 - 你已经得到了很好的“.NET依赖注入”书籍(对于那个列表,我将添加Ninject,但不幸在本书中没有提到) - 并选择其中一个,你了解最好和喜欢的语法。 要开始使用高级功能并不重要, 只需要开始

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

    链接地址: http://www.djcxy.com/p/82133.html

    上一篇: How to choose a DI container?

    下一篇: The best way to organize work with database