首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend Di vs ServiceManager依赖注入容器

Zend Di vs ServiceManager依赖注入容器
EN

Stack Overflow用户
提问于 2012-11-07 02:52:57
回答 3查看 1.8K关注 0票数 13

当我们有ServiceManager的时候,DI是做什么的,它的用例是什么?

它们看起来很相似,因为在zend-dizend-servicemanager的配置文件中,我们都可以设置一些选项,比如aliasesinvokables

我试图更好地了解这些组件在幕后发生了什么,但文档没有给我足够的信息。

您能告诉我有什么区别吗?什么时候我应该用Di而不是ServiceManager

EN

回答 3

Stack Overflow用户

发布于 2012-11-07 05:04:53

当服务管理器使用用户提供的工厂时,Zend\DI依靠像反射这样的魔术来检测和注入依赖项。这是主要的区别。

由于复杂性、调试和性能问题,Di在社区中有点过时,取而代之的是SM。它应该对RAD有好处,但你需要高于平均水平的知识才能正确使用它。

另一方面,SM有非常冗长和明确的连接,你可以在一年后打开你的代码,很容易弄清楚发生了什么。

票数 15
EN

Stack Overflow用户

发布于 2013-03-10 04:29:13

Zend\Di负责将类连接在一起,而使用Zend\ServiceManager则必须手动连接,并为要实例化的每个类编写工厂闭包。

由于不依赖于速度较慢的Reflection APIZend\ServiceManager的速度要快得多。另一方面,为包含数百个类的大型应用程序编写闭包变得非常单调乏味。随着应用程序的增长,使闭包保持最新将变得更加棘手。

为了解决这个问题,我编写了一个名为ZendDiCompiler的Zend Framework2模块。它依赖于Zend\Di来扫描您的代码,并自动生成工厂代码来实例化您的类。您可以充分利用这两个组件:Zend\Di的强大功能和Zend\ServiceManager的性能。

我在ZendDiCompiler的文档中做了相当多的工作,还提供了一些简单和更高级的用法示例。

票数 6
EN

Stack Overflow用户

发布于 2018-02-26 18:55:39

基本的区别是:

  • Zend\ZerviceManager =出厂驱动的Container
  • Zend\Di implementation

=自动装配IoC IoC

Zend\Di在版本3中进行了重构,它的行为现在比v2更可靠、更可预测,它被设计为无缝地集成到zend-servicemanager中,以提供自动布线功能(不再有奇怪的魔力)。因为它使用PHP的反射api来解析依赖项,所以它比工厂驱动的方法要慢。因此,版本3附带了一个AoT编译器,用于创建省略反射使用的预解析注入器。另一个好处是:生成的工厂也可以直接与Zend\ServiceManager一起使用。

对于同时使用这两个组件的AoT,有一个指南:https://zendframework.github.io/zend-di/cookbook/aot-guide/

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13257453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档