使用symfony DI延迟加载依赖项

Chr*_*isR 7 dependency-injection symfony

目前我已经准备好了一个服务及其所有依赖项的Symfony2 DI容器实例.让我们说例如我有一个Car类,它有Engine和Lights作为依赖项.

在我当前的设置中,这两个依赖项都是在创建Car对象时通过setter注入自动创建的,但很可能这次我的Car对象不需要它的灯光,因此它不需要创建实例这种依赖.

有没有办法在Symfony DI中实现这一目标?因此,只在需要时才创建Lights对象的实例?我猜这是像Doctrine那样的某种代理实现,但据我所知,它在Symfony DI中不存在.

ivo*_*oba 2

通过 services.yml 自动注入构造函数强制执行的依赖关系。
如果您有可选的依赖项,则在需要时通过控制器中的设置器注入它们。

$this->container->get('cars')->setLights(new \Namespace\Lights());
Run Code Online (Sandbox Code Playgroud)

当然,您的 Cars 类必须像这样设计,并且您必须自己在控制器或任何需要的代码中直接注入。