Php 服务:可选依赖项

Php 服务:可选依赖项,php,symfony,servicecontroller,Php,Symfony,Servicecontroller,假设我有一个服务,可以根据调用的方法调用其他服务: class Foobar { public function foo() { return *SERVICE_A*->baz(); } public function bar() { return *SERVICE_B*->qux(); } } 现在,当我调用Foobar的foo()方法时,我需要使服务对Foobar可用。我可以将服务_A和服务_B定义为Foobar

假设我有一个服务,可以根据调用的方法调用其他服务:

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

    public function bar() {
        return *SERVICE_B*->qux();
    }
}
现在,当我调用Foobar的foo()方法时,我需要使服务对Foobar可用。我可以将服务_A和服务_B定义为Foobar的依赖项,并在构建阶段将它们的创建委托给服务容器,使用Foobar的setServiceA()或setServiceB()方法等设置器从外部注入它们,或者将服务容器传递给Foobar,使其能够只构造当前真正需要的服务

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

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

正是您想要的。

正是您想要的