2012-09-19 4 views
0

특정 클래스가 세터 주입에 필요한 인터페이스의 구현을 어떻게 지정합니까? 나는 예를 들어 생성자 삽입을 위해 작동하지만 setter에는 작동하지 않는다.Zend Framework 2 인터페이스를 통한 종속성 삽입

class Lister1 { 
    public $finder; 
    public function setFinder(Finder $finder){ 
     $this->finder = $finder; 
    } 
} 

interface Finder { 
    public function findAllByName($name); 
} 

class FinderImpl1 implements Finder { 
    public function findAllByName($name) {} 
} 

이제 다음 코드가 작동합니다.

$di = new Di(); 
$di->instanceManager()->addTypePreference(
    'Finder', 
    'FinderImpl1' 
); 
$lister = $di->get('Lister1'); 

하지만이있는 경우뿐만 아니라

class Lister2 extends Lister1{ 
} 
class FinderImpl2 implements Finder { 
    public function findAllByName($name) {//assume a different impl} 
} 

다음 무슨 일이 그래서 Lister1는 FinderImpl1가 Lister2가 FinderImpl2 주입이 필요 &을 주입해야합니다.
클래스별로 유형 환경 설정을 추가 할 수 있습니까?
zf2와 함께 제공되는 단위 테스트를 살펴 보았습니다.

답변

1

랄프의 DI examples을 찾은 것 같습니다. 좋은. 그것은 나의 첫 번째 제안이 될 것입니다. :)

내가 잘못 생각한 것 같습니다. (DI를 사용한 이후로 잠시 있었지만) 생각보다 단순 할 수도 있습니다.

과 같이 세터 주입을 사용 :

$di = new Zend\Di\Di; 
$di->configure(new Zend\Di\Config(array(
    'instance' => array(
     'Lister1' => array(
      'parameters' => array(
       'finder' => 'FinderImpl1', 
      ), 
     ), 
     'Lister2' => array(
      'parameters' => array(
       'finder' => 'FinderImpl2', 
      ), 
     ), 
    ) 
))); 

당신이 "환경 설정"설정에 대해 걱정할 필요가 다음에, 인터페이스를 인스턴스를 정의하려고한다면, 어떤 경우 까다로운 일이 있으면 환경 설정과 함께 별칭을 사용하는 것이 좋습니다.

+0

대단히 감사합니다. 실제로 작동합니다. – SuprF1y

관련 문제