PHP-DI注册实例用于注入


PHP-DI Register Instance for ctor Injection

我使用php-di,我在我的项目中使用twig。我想用php-di注册$twig的实例,以便将其实例注入到需要的对象上的tor参数中。我想使用php定义和避免phpdoc注释,并已阅读此http://php-di.org/doc/php-definitions.html

下面是我的基本例子:

$builder = new ContainerBuilder();
$builder->addDefinitions(['Twig_Environment' => $twig]);
$container = $builder->buildDevContainer();

然后我有$twig作为一些其他类的参数。这可能吗?为了清楚起见,我不想为每个使用$twig的对象创建一个定义。

public function __construct('Twig_Environment $twig)
{
    $twig->render('homepage.twig');
}

我得到的错误表明php-di正在尝试创建一个新的Twig_Environment实例,而不是使用已经创建的实例。

这些都是正确的,除了创建容器所调用的方法:

$container = $builder->buildDevContainer();

创建一个全新的容器,忽略你上面配置的;)(它实际上是一个静态方法,你可以很容易地使用它来创建一个新的容器,像这样:$container = ContainerBuilder::buildDevContainer();)。

你应该用:

$container = $builder->build();