服务:可选的依赖项

时间:2013-09-03 09:26:23

标签: php symfony servicecontroller

让我们假设我有一个可以调用其他服务的服务,具体取决于所谓的方法:

class Foobar
{
    public function foo() {
        return *SERVICE_A*->baz();
    }

    public function bar() {
        return *SERVICE_B*->qux();
    }
}

现在当我调用Foobar的foo()方法时,我需要为Foobar提供SERVICE_A。我可以通过将SERVICE_A和SERVICE_B定义为Foobar的依赖关系并将其创建委托给构建阶段的服务容器,使用setFO的setServiceA()或setServiceB()方法之类的setter从外部注入它们,或者将服务容器传递给我来实现。 Foobar使其能够仅构建目前真正需要的服务。

第一个选项对我来说似乎不对,因为它会创建SERVICE_A和SERVICE_B,即使其中一个不会被调用。 第二种选择显然是错误的,因为它将服务基础设施暴露给外部世界。 第三种选择也不好,因为它使服务依赖于使代码难以测试的整个服务容器等。

所以我的问题是, 有没有办法延迟加载服务依赖?

1 个答案:

答案 0 :(得分:4)

Lazy Services正是您正在寻找的。