2013-05-01 102 views
0

是否可以禁用DI的共享选项? 发现了一些补丁,这表明它应该像这样工作:ZF2 DI配置共享

return(array(
'di' => array(
    'definition' => array(
     'class' => array(
      'SomeService' => array(
      ), 
     ) 
    ), 
    'instance' => array(
     'SomeService' => array(
      'shared' => false 
     ), 
    ) 
))); 

但使用$serviceManager->get('SomeService');

任何想法时,不幸的是我总是得到相同的实例?

回答

0

看起来像ZF2(2.1.5)问题,因为ServiceLocator不检查DI配置。在致电$serviceManager->get('SomeService');之前,一个快速且肮脏的修复方法是使用$this->getServiceLocator()->setShared('SomeService', false);

0

根据定义,服务定位符模式将每次返回相同的服务实例。

ZF2 DI是一种服务定位模式;但是,要获得独立的情况下,一个方法是使用别名:

'instance' => array(
    'alias' => array(
     'queue1' => 'Zend_Queue', 
     'queue2' => 'Zend_Queue', 
    ), 
) 

这个例子是从ZF2 BETA4项目前期拍摄,但应该可以正常工作电流ZF2 DI。目前可能有更好的方法来做你以后的事情(我有一段时间没有使用过DI),但是这很有效。


编辑

进一步展望代码,according to this line,你应该没有什么工作。无论是'shared''share'关键字,当放置在相同深度的'parameter'关键字(像你这样),应该引起->setShared()被称为该服务,在通过给定值。

不幸的是,我不能DI的更多帮助,因为我不再使用它。

+0

这绝对是一个错误。 我在这里提交了一份报告:https://github.com/zendframework/zf2/issues/4377 – machete 2013-05-02 19:24:48