Php 控制反转:您是否曾经决定过什么依赖注入框架最适合一个项目?你选了哪一个?为什么?

Php 控制反转:您是否曾经决定过什么依赖注入框架最适合一个项目?你选了哪一个?为什么?,php,python,frameworks,dependency-injection,Php,Python,Frameworks,Dependency Injection,这个问题不是要引发一场关于什么DI框架是“最好的”(我不认为有一个确定的通用解决方案),而是要根据专业经验讨论不同类型项目的好的替代方案,不管是哪种编程语言 我想了解一些问题: 您在DI框架中寻找的最重要的特性是什么?为什么它最适合你的项目 DI框架有什么其他框架没有的?它有什么特别之处 为什么不为其他不同的项目选择相同的DI框架 DI框架如何提高应用程序的可测试性和配置灵活性(特别是在不同的环境下:开发、登台、生产等) 许多DI框架被认为是简单的。但是维护依赖项的配置有多容易呢?(例如:是否

这个问题不是要引发一场关于什么DI框架是“最好的”(我不认为有一个确定的通用解决方案),而是要根据专业经验讨论不同类型项目的好的替代方案,不管是哪种编程语言

我想了解一些问题:

  • 您在DI框架中寻找的最重要的特性是什么?为什么它最适合你的项目
  • DI框架有什么其他框架没有的?它有什么特别之处
  • 为什么不为其他不同的项目选择相同的DI框架
  • DI框架如何提高应用程序的可测试性和配置灵活性(特别是在不同的环境下:开发、登台、生产等)
  • 许多DI框架被认为是简单的。但是维护依赖项的配置有多容易呢?(例如:是否过于冗长或难以阅读和修改?)
我最终可能会接受一个答案,但在这个问题上没有“最佳答案”。我将感谢任何人的经验,这是有益的分享


我特别感兴趣的是Python和PHP中DI框架的使用经验,我认为在这方面的选择不是很直接。但问题是语言不可知。

我通常使用以下标准选择框架,无论是DI还是其他框架:

  • 选择一个具有手头工作所需功能的框架
  • 更喜欢简单的框架——1不需要的“额外”东西越少越好
  • 与您已经使用的语言/框架相比,更喜欢“内置”框架
  • 更喜欢我已经知道并使用过的框架

  • 通常,通过上面的工作,这是非常明显的。例如,我选择的最后一个DI框架是MEF,主要是因为它是一个C#项目(第3点),它很简单,并且它做了我需要它做的事情。

    好吧,谈论Java听起来很简单。。。有Spring及其DI,如果您使用Spring技术堆栈进行开发,那么您只需使用它的DI:)如果您使用另一个技术堆栈,那么Spring就不那么容易集成,实际上您需要它吗?与Spring相比,Guice完全是关于DI的,在这种情况下,您不需要向类路径中添加额外的库,可能需要一些额外的配置等。Spring和Guice都实现了相同的功能(Java依赖项注入)。。。嗯,我认为很容易决定使用什么,Spring还是Guice

    另一方面,JavaEE6带来了新的(Java的上下文和依赖注入;CDI),它基于JSR330。当您打算使用兼容JavaEE6的应用程序服务器时,值得一看CDI,这样您就不需要额外的库,因为应用程序服务器已经理解DI并关心它。CDI允许您在JSR330的基础上分层并增强它,从而实现更多功能

    如果您仍然不使用Spring/Guice,那么最好从CDI开始

    更新: 忘了提一下:CDI现在由Weld项目(seamframework.org/Weld)实现,它支持流行的服务器,所以您可以立即尝试。JBossAS6随附


    Spring和Guice之间的一些比较,以及使用哪一个的建议:

    这些问题中的大多数(如果不是全部的话)以前都已经得到了回答。相关:相关:我想讨论除C#和Java之外的其他语言的DI框架。Python和PHP看起来非常有趣。语言之间的比较也可能有用。不过,确实存在相关的问题。但我想重点介绍为给定项目选择DI框架的经验。从Java的角度来看,这是一个有用的后续工作。我已经尝试过Spring,在不干扰更多框架的情况下,将其DI与其余部分一起使用是有意义的。我一直想试试Guice。与Spring相比,我想知道它的优点(感谢您提到一些)。至于CDI,它看起来是一个很有前途的标准。我们希望看到更多的应用程序实现它这是一条很好的建议。按照你的说法,这是一个非常合理的标准:)