Контейнер symfony: конструктор введенного класса не вызывается

Когда я внедряю службу в другую через внедрение конструктора, конструктор внедренного класса не вызывается. Есть ли у кого-нибудь объяснение этому. Что я упускаю из виду?

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

services.yml

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

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

Класс А:

<?php

namespace Acme\FooBundle;

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

Класс Б:

<?php

namespace Acme\FooBundle;

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

Тестовый код:

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

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

Вывод:

Тест А --------------------- построение А

Тест B --------------------- построение B

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


person Jorgo Miridis    schedule 10.06.2015    source источник


Ответы (1)


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

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

person falinsky    schedule 10.06.2015
comment
Отлично! Именно это и происходило. Я не учел, что служба создается только один раз. Большое спасибо. - person Jorgo Miridis; 12.06.2015