2012-08-24 2 views
4

나는 디자인 패턴을 배우기 위해 사용하는 아주 작은 응용 프로그램을 가지고있다.의존성 주입 컨테이너가 제대로 보이지 않는다

현재 저는 의존성 주입 컨테이너를 구현하려고하지만 단지 공장처럼 느껴집니다.

누군가가 컨테이너의 문제점과 개선 할 수있는 부분을 설명 할 수 있습니까?

내가는 아주 최소한의 말했듯이 앱은 객체의 몇 가지가 필요합니다 팩토리는 의존성 삽입 (Dependency Injection)의 정적 유형으로 볼 수있다

class MyContainer 
{ 
    public function getObjectA() 
    { 
     return new MyObjectA(); 
    } 

    public function getObjectB() 
    { 
     $objectBArrayParam = array('arrparam1','arrparam2', 'arrparam3', 'arrparam4'); 
     $objectB = new MyObjectB('param1','param2', 'param3', 'param4', $objectBArrayParam); 
     return $objectB; 
    } 

    public function getApplicationRunner() 
    { 
     $objectA = $this->getObjectA(); 
     $objectB = $this->getObjectB(); 

     $app = new ApplicationRunner($obejctA, $objectB); 

     return $app; 
    } 

} 

답변

1

합니다. 컴파일 타임에 인수를 지정하면 결과 객체 그래프는 항상 동일합니다.

종속성 주입 도구는 런타임에 어떤 인수가 필요한지 확인하기 위해 일종의 리플렉션을 사용합니다. 그런 다음 구성에서 필요한 유형을 검색하고 개체 그래프를 생성합니다.

간단한 DI 컨테이너를 작성하려면 유형을 등록하고 런타임에 필수 유형을 확인하는 지원을 작성해야합니다. 같은

뭔가 :

myDi.Register(<typeofIObectA>).To(<typeofobjectA>) 
myDi.Register(<typeofIObjectB>).To(<typeofobjectB>) 

MyDi.Resolve(<typofApplicationRunner>) 

디 컨테이너는 ApplicationRunner는 두 개의 인수가 필요하다고 볼 것입니다. 이러한 유형의 구성을 점검하고 오브젝트를 구성합니다.

+0

내 예제는 종속성 주입 컨테이너가 아닌 공장입니다. – user1572427

+0

예, DI가 아닌 공장입니다. –