2013-05-01 3 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

ServiceLocator가 DI 구성을 확인하지 않기 때문에 ZF2 (2.1.5)와 유사합니다. 신속하고 더러운 수정은 $serviceManager->get('SomeService');을 호출하기 전에 $this->getServiceLocator()->setShared('SomeService', false);을 사용하는 것입니다.

0

서비스 로케이터 패턴은 정의에 따라 매번 동일한 서비스 인스턴스를 반환합니다.

ZF2 DI는 Service Locator 패턴입니다. 그러나, 별도의 인스턴스를 얻는 방법 중 하나 별칭을 사용하는 것입니다

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

이 예는 ZF2 사전 beta4 프로젝트에서 가져온 것입니다 만, 현재 ZF2 DI를 위해 잘 작동합니다. 더 나은 방법이있을 수 있습니다, 현재, 당신이 한 일을하는 것입니다 (저는 잠시 동안 DI를 사용하지 않았습니다). 그러나 이것은 잘 작동합니다.


편집

당신이 작동해야 무슨 짓을했는지 코드, according to this line로 더 찾고있다. (당신처럼) ->setShared()을 야기한다 전달 된 주어진 값으로,이 서비스를 호출합니다.

불행히도 'parameter' 키워드와 같은 깊이에 배치 할 때 어느 'shared' 또는 'share' 키워드는, 나는 할 수 없다 더 이상 DI를 사용하지 않아서 DI에 대한 많은 도움을줍니다.

+0

확실히 버그입니다. 나는 여기에 보고서를 제출했다 : https://github.com/zendframework/zf2/issues/4377 – machete