是否可以禁用DI的共享选项? 找到一些Patch,表明它应该像这样工作:
return(array(
'di' => array(
'definition' => array(
'class' => array(
'SomeService' => array(
),
)
),
'instance' => array(
'SomeService' => array(
'shared' => false
),
)
)));
但不幸的是,在使用$serviceManager->get('SomeService');
有什么想法吗?
答案 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的帮助不大,因为我不再使用它了。