종속성 주입과 관련하여 제가 해결하고자하는 몇 가지 문제가 있습니다. 언급 된 첫 번째 것은 구현 된 의존성 주입 컨테이너 (DIC)입니다.이 컨테이너는 ReflectionClass을 사용하여 생성자를 통해 종속성을 등록하고 해결할 수 있습니다.PHP에서 종속성을 올바르게 삽입하는 방법
$container = new DiC;
$container->register('session', 'CSession');
$container->register('response', 'CResponse');
$container->register('model', 'CSomeModel');
$container->register('view', 'CSomeView');
$container->register('controller', 'CSomeController');
종속 컨트롤러 :
이class CSomeController extends CController
{
public function __construct(CSomeModel $model, CSomeView $view)
{
// assign arguments here
}
}
이제 컨트롤러가 DIC를 통해 인스턴스화 할 수 있습니다 : 그것은 자동화 설명되어 있기 때문에
$controller = $container->resolve('controller');
나는이 방법을 좋아한다, 그러나 클래스 CController에 의존 특정 클래스 CSomeModel, 나쁜 CSomeView. MVC 트라이어드는 독립적으로 인스턴스화해야합니다. - 예를 들어 CStherController에 COtherView를 전달할 수 없습니다.
내 두 번째 추측은 DIC를 주입하는 것입니다
class CSomeController extends CController
{
public function __construct(DiC $dic)
{
// resolve dependencies through $dic
}
}
이 사람은 DIC 글로벌, 많은 사람들이 DI를 구현하는 방법이 아니다 주장 개체 수 있습니다.
두 가지 방법의 약점을 제거하는 세 번째 방법이 있습니까?
'DiC' 수업을 게시 하시겠습니까? –
[Laravel4] (http://four.laravel.com/docs/ioc)가이를 처리하는 방법, 특히 "구현에 대한 인터페이스 바인딩"세션을 살펴 봐야합니다. 관련 소스는 [Github] (https://github.com/laravel/framework/blob/master/src/Illuminate/Container/Container.php) – vFragosop
에서 찾을 수 있습니다. Symfony2는 Java 기반의 매우 견고한 DI 구성 요소를 사용합니다 Spring ... 이것은 당신이하고있는 것과 비슷합니다 .. 더 나아가는 것 .. http://symfony.com/doc/2.0/components/dependency_injection/introduction.html – Dinesh