首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zf2 ServiceManager vs ServiceLocator

zf2 ServiceManager vs ServiceLocator
EN

Stack Overflow用户
提问于 2013-09-08 10:50:22
回答 2查看 5.9K关注 0票数 15

我正在学习zf2,从网上阅读文档,教程等。现在,我对Zend\ServiceManager\ServiceManagerAwareInterface.phpZend\ServiceManager\ServiceLocatorAwareInterface.php感到困惑。

另外,在某些地方(如控制器),我使用$this->getServiceLocator()来获取ServiceManager对象,而在其他一些地方,我们使用->getServiceManager(),它也返回相同的ServiceManager对象。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-08 19:35:41

定位器是接口。Zend 2的设计是用“按约定设计”完成的,这意味着您依赖于接口而不是类。Manager是Locator的默认实现。

除一个组件外,所有组件都使用定位器。但是,管理器提供的功能比界面显示的要多。Zend\Mvc\Application使用这些特性,因此依赖于Manager而不是Locator。

在*感知的初始化器中使用Locator的决定对于发布来说太晚了,所以这就是为什么同时存在一个ServiceLocatorAwareInterface和一个ServiceManagerAwareInterface。已经有用户代码使用Manager的初始化程序,因此为了向后兼容而保留它。在内部,所有组件都使用定位器初始化器。如果必须选择,请选择定位器,并尽可能将Manager放在一边。

很久以前,我还写了关于定位器和管理器的博客:https://juriansluiman.nl/article/120/using-zend-framework-service-managers-in-your-application

票数 16
EN

Stack Overflow用户

发布于 2013-09-08 11:00:16

ServiceManager基本上是ServiceLocator接口的实现。出现这两种情况的原因是用户可以有自己的ServiceLocator接口实现。当您请求->getServiceManager()时,它将返回显式ServiceManager实现。通过使用->getServiceLocator(),您将请求ServiceLocator接口的任何实现,这可以是ServiceManager实现,也可以是您自己的实现。但是,由于大多数情况下只有默认的ServiceManager实现,所以您将得到相同的对象。

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

https://stackoverflow.com/questions/18682835

复制
相关文章

相似问题

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