2013-05-01 4 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. Быстрое и грязное исправление заключается в использовании $this->getServiceLocator()->setShared('SomeService', false); перед вызовом $serviceManager->get('SomeService');.

0

Шаблон Service Locator, по определению, будет возвращать один и тот же экземпляр службы каждый раз.

ZF2 DI - это шаблон локатора обслуживания; Однако, один из способов, чтобы получить отдельные экземпляры, чтобы использовать псевдонимы:

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

Этот пример взят из проекта до Beta4 ZF2, но должно работать нормально для текущего ZF2 DI. В настоящее время может быть лучший способ сделать то, что вам нужно (я не использовал DI некоторое время), но это работает хорошо.


Редактировать

Заглядывая в код, according to this line, то, что ты должен работать. Либо 'shared' или 'share' ключевых слова, когда они размещены на ту же глубину, как 'parameter' ключевого слова (как вы это делали) должен вызывать ->setShared() называться для этой службы, с заданным значением, переданным в.

К сожалению, я не могу быть гораздо больше помогают с DI, так как я больше не использую его.

+0

Это определенно ошибка. Я подал отчет здесь: https://github.com/zendframework/zf2/issues/4377 – machete

Смежные вопросы