yadif의 수정 된 복사본을 내 종속성 주입 프레임 워크로 사용하고 있습니다.종속성 컨테이너 주입을위한 클래스 표시
abstract class AContainerAware{
protected $_container;
public function setContainer(Container $container){
$this->_container = $container;
}
protected function get($component){
//return a component from $this->_container;
}
}
이 대부분의 경우에서 잘 작동 :
현재, 나는 symfony2의 ContainerAware에 비슷한입니다 AContainerAware라는 추상 클래스를 만들었습니다. 컨테이너에 AContainerAware를 확장해야하는 클래스가 있고 컨테이너는 setContainer()
을 사용하여 개체를 만드는 동안 DI 프레임 워크에서 자동으로 주입됩니다. 그런 다음 컨테이너에서 구성 요소를 쉽게 가져올 수 있습니다.
타사 공급 업체 패키지로 작업 할 때 문제가 있습니다. 이 경우, 예를 들어 twig의 확장 프로그램을 작성하려면 Twig_Extension
클래스를 확장해야하는데 이는 컨테이너에 액세스하기 위해 AContainerAware
을 확장 할 수 없음을 의미합니다.
AContainerAware
을 인터페이스 IContainerAware
으로 바꿀 것인지 고려 중입니다. 클래스는 여러 인터페이스를 구현할 수 있으므로 대부분의 경우 IContainerAware
을 구현할 수 있어야합니다. 이 접근법의 유일한 문제점은 인터페이스에 setContainer()
및 get()
에 대한 코드를 작성할 수 없으므로 컨테이너가 필요한 각 클래스에서 해당 함수의 정확한 코드를 구현해야한다는 것은 반복적 인 문제입니다. 또한 setContainer()
및 get()
이 앞으로 변경 될 경우 유지 관리 문제가 발생합니다.
컨테이너 주입을위한 클래스를 표시하는 더 좋은 방법이 있습니까?
다음과 같이 여러 클래스를 확장 할 수 있습니다. http://stackoverflow.com/questions/356128/can-i-extend-a-class-using-more-than-1-class-in-php – Rijk
' 그래도'__call()'을 사용하여 다중 상속을 위장하는 것을 좋아하지는 않는다. 또한 클래스 중 하나의 복사본을 클래스 내에서 인스턴스화해야합니다. 이러한 종류의 종속성 주입은 패배합니다. – F21