共享ZF2 DI配置

时间:2013-05-01 22:47:37

标签: dependency-injection zend-framework2 shared

是否可以禁用DI的共享选项? 找到一些Patch,表明它应该像这样工作:

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

但不幸的是,在使用$serviceManager->get('SomeService');

时,我总是得到相同的实例

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

ZF2 DI是服务定位器模式;但是,获取单独实例的一种方法是使用别名:

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

此示例取自ZF2 pre-beta4项目,但对于当前的ZF2 DI应该可以正常工作。目前,可能有更好的方法来做你想要做的事情(我有一段时间没有使用DI),但这很有效。


修改

进一步研究代码according to this line,你所做的应该有效。当'shared''share'关键字与'parameter'关键字放置在同一深度时(与您一样)应该导致->setShared()为该服务调用,给定的值传入。

不幸的是,我对DI的帮助不大,因为我不再使用它了。