2013-02-18 66 views
0

刚学习ZF2,我有点困惑。我对ServiceManager有一个大体的了解,并且了解如何添加服务,以及如何使用ServiceManagerAwareInterface将服务拉入课堂。但是在我的搜索中,我遇到了ServiceLocatorAwareInterface。Zend Framework 2 - ServiceManagerAwareInterface和ServiceLocatorAwareInterface之间的区别

有人能告诉我两者之间的区别,以及我会使用哪种情况?

+1

下面的答案是好的,ServiceManager是ServiceLocator的特定实现,您应该使用ServiceLocator相关的障碍 – Andrew 2013-02-18 08:37:33

回答

4

ServiceManagerAwareInterface被引入来覆盖MVC组件的特定需求,这需要服务定位器的具体实现。 iirc解除了此限制并且ServiceManagerAwareInterface被非正式考虑弃用。

至于你,你不想依赖具体的实现,而不是依靠契约或接口。因此,您应该更喜欢ServiceLocatorAwareInterface

+0

这是否意味着Skeleton Application将不再包含ServiceManager实例?然后在module.config.php中,我会配置“service_locator”而不是“service_manager”? – 2013-02-18 08:58:30

+0

@Aaron Murray如果不是非常需要,请避免使用'ServiceManagerAwareInterface'。如果你需要注入一个'ServiceManager'(特别是),那么你的架构可能有一个缺陷。 – Ocramius 2013-02-18 08:59:29

+0

@AaronMurray不,配置仍然适用于“service_manager”。不要担心, – Ocramius 2013-02-18 09:00:06