контейнер на 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";
    }
}

Клас B:

<?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');

Изход:

Тест A ---------------------- конструиране на A

Тест 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