当我通过构造函数注入将服务注入另一个服务时,注入类的构造函数未被调用。 有没有人对此作出解释。我在俯瞰什么?
为了演示目的,我创建了这个小样本:
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的构造函数。
答案 0 :(得分:1)
正如您在$this->getContainer()->get('foo.A');
之前调用$this->getContainer()->get('foo.B');
一样,已经存在class A
的实例,因此不会再次创建它。
尝试仅调用$this->getContainer()->get('foo.B');
,您将获得两个构造函数的输出