目前我已经准备好了一个服务及其所有依赖项的Symfony2 DI容器实例。让我们说例如我有一个Car类,它有Engine和Lights作为依赖项。
在我当前的设置中,这两个依赖关系是在创建Car对象时通过setter注入自动创建的,但很可能这次我的Car对象不需要它的灯光因此它没有明确需要创建此依赖项的实例。
有没有办法在Symfony DI中实现这一目标?因此,只在需要时才创建Lights对象的实例?我猜这是像Doctrine那样的某种代理实现,但据我所知,它在Symfony DI中不存在。
答案 0 :(得分:2)
答案 1 :(得分:1)
一个非常有趣的问题,但我不认为它可能在Symfony2的依赖注入容器中。容器只知道你告诉它的内容 - 在这种情况下,你有一个依赖于特定用例的依赖。此外,服务注册发生在应用程序的早期,所以我不知道如何让它工作。
也许您应该使用Factory模式。将CarFactory
注册为服务,然后在获取Car
实例时,您可以指定它应包含Light
依赖项。
我可以问你为什么要这样做吗?可能有一个更简单的解决方案。
答案 2 :(得分:0)
这不是一个很好的解决方法,但您可以尝试注入整个DIC,然后在必要时获取Light和Engine服务。
我在考虑Car
类中的这种方法:
protected function getLightService()
{
if (!$this->light) { //so we reuse the first instance
$this->light = $this->dic->get("car.light");
}
return $this->light;
}