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

时间:2015-06-10 23:47:14

标签: php symfony dependency-injection constructor-injection

当我通过构造函数注入将服务注入另一个服务时,注入类的构造函数未被调用。 有没有人对此作出解释。我在俯瞰什么?

为了演示目的,我创建了这个小样本:

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 个答案:

答案 0 :(得分:1)

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

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