2013-04-25 2 views
0

symfony가 dependency injection을 어떻게 사용하는지 살펴 보았습니다. 그러나 나는 그것의 직접적인 목적을 이해하지 못한다.의존성 주입 Symfony 객체 생성 매개 변수

모든 것을 서비스로 표시하는 것 같습니다. 서비스는 구성된 라우터의 라인을 따라 있습니다. 이러한 서비스의 대부분은 초기화에 필요한 일련의 기본 변수를 가지고 있습니다. 그러나 isShared라고하는 방법이 있습니다.

나는 그 메소드를 사용할 때 이미 만들어진 객체 대신에 새로운 객체를 생성한다고 생각한다.

하지만 생성 될 객체가 완전히 다른 변수를 필요로 할 때 어떻게됩니까?

class foobarClass 
{ 
    public function __construct($config.foo) 
    { 
     // 
    } 
} 

$container = new sfContainerBuilder(array('config.foo' => 'bar')); 

$container->register('foobar','foobarClass') 
      ->addArgument('%config.foo%') 
      ->isShared(false); 

config.foo 란 bar가 아니라 foo일까요? 기본적으로 가능한 모든 구성에 대해 다른 정의를 작성해야합니까 (이상하게 보이고 DIC의 목적을 무력화시키는 것)?

또한 종속성 주입과 역 제어 간의 주요 차이점은 무엇입니까? 언제 어디서 무엇에 익숙합니까?

미리 감사드립니다.

편집 : 나는 필요한 경우 새 경로를 주기로하고 어떻게

class Files 
{ 
    protected $_path; 

    public function __construct($path) 
    { 
     $this->_path = $path; 
    } 
} 

$container = new sfContainerBuilder(array('path.to.something' => '/some/path/file.abc')); 

$container->register('files','files') 
      ->addArgument('path.to.something') 
      ->isShared(false); 

:

매개 변수 문제에 대한 또 다른 예? 정의에는 이미 path.to.smething이 있습니다. 하지만 path.sto.somethingElse가있는 Object가 필요한 경우에는 어떻게해야합니까?

+0

의존성 주입 제어의 반전을 할 수있는 방법에 대해 다음 페이지를 계속할 수 있습니다. 컨트롤의 반전을 수행하는 다른 많은 방법이 있습니다. 매개 변수에 관해서는 구성이 일반적으로 응용 프로그램이 실행될 때 변경되지 않는 구성 파일에서 읽혀지기 때문에 중요하지 않습니다 (SF2로 태그를 지정했기 때문에 질문이 혼란 스럽긴하지만 SF1처럼 보입니다). – mpm

+0

제 잘못, SF2라고 생각했습니다. – John

답변

0

Symfony2에서 서비스는 일반적인 상속이며 상속을 필요로하지 않습니다.
목적은 이 개체를 시작하는 데 신경 쓸 필요가 없다는 것입니다.
정말 작은 응용 프로그램의 경우에는 필요하지는 않지만 일부 개체간에 종속성이있을 때 문제가 될 수 있습니다. 예를 들면 : 당신은이 관계를 가진 4 개체가 :
B -needs-> A, C -needs->은을, D -needs-> 정말 개시를 구성하는 데 유용합니다 이때 B & C

대신에 각 클래스의 내부가 아니고 대신 services.xml/services.yml에이 클래스를 씁니다.

제어의 반전이이 컨텍스트에서 사용되는 경우가 있습니다. 그러나 객체의 외부에서 초기화를 처리하기 때문에 제어의 반전 (Dependency Injection)도 수행됩니다. 다른 질문에

:

config.foo 바 있지만 foo는 안 무엇입니까?

매개 변수를 생성자에 전달하지 않고 다른 함수에서 전달할 수 있습니다. 당신이 정말로 인수를 여러 번 필요하지만, 당신은 또한 양쪽에 상속 (DI 및 클래스) documentaion for Parent Services

을 사용할 수 있습니다 유연하지만 첫째, 나는이 mailer 예제이 읽어보실 것을 추천도 원하는 또 다른 해결책 , 정말 쉽습니다 : http://symfony.com/doc/current/components/dependency_injection/introduction.html 은 그럼 당신은 사출의 다른 유형 등