2015-06-10 2 views
0

Когда я внедряю услугу в другую через инъекцию конструктора, конструктор вводимого класса не вызывается. У кого-нибудь есть объяснение. Что я не замечаю?контейнер symfony: конструктор инъецируемого класса, который не называется

Я создал этот небольшой образец для демонстрационных целей:

services.yml

services: 
    foo.A: 
     class: Acme\FooBundle\A 

    foo.B: 
     class: Acme\FooBundle\B 
     arguments: 
      a: "@foo.A" 

Класс A:

<?php 

namespace Acme\FooBundle; 

class A 
{ 
    public function __construct() 
    { 
     echo "constructing A\n"; 
    } 
} 

Класс B:

<?php 

namespace Acme\FooBundle; 

class B 
{ 
    public function __construct($a) 
    { 
     echo "constructing B\n"; 
    } 
} 

Testcode:

echo "\nTest A ----------------------\n"; 
$this->getContainer()->get('foo.A'); 

echo "\nTest B ----------------------\n"; 
$this->getContainer()->get('foo.B'); 

Выход:

Тест A ---------------------- строительство A

Испытание B ---------------------- строительство B

При получении «foo.B» я ожидаю, что также будет вызван конструктор A.

ответ

1

Как вы звонили $this->getContainer()->get('foo.A'); до $this->getContainer()->get('foo.B');, есть экземпляр class A, так что он не создан снова.

Попробуйте назвать только $this->getContainer()->get('foo.B');, и вы получите выход оба конструкторов

+0

Отлично! Это именно то, что происходило. Я не думал, что услуга создается только один раз. Большое спасибо. –

+0

@JorgoMiridis добро пожаловать – falinsky

+0

@JorgoMiridis, вы отметили бы этот ответ как принятый, если бы он помог вам – falinsky