symfony 容器:未调用注入 class 的构造函数

symfony container: injected class's constructor not called

当我通过构造函数注入将一个服务注入另一个服务时,注入的 class 的构造函数没有被调用。 有没有人对此有解释。我忽略了什么?

我出于演示目的创建了这个小示例:

services.yml

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

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

Class答:

<?php

namespace Acme\FooBundle;

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

Class乙:

<?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 的构造函数也会被调用。

正如您在 $this->getContainer()->get('foo.B'); 之前调用 $this->getContainer()->get('foo.A'); 一样,已经存在 class A 的实例,因此不会再次创建它。

尝试仅调用 $this->getContainer()->get('foo.B');,您将获得两个构造函数的输出