【问题标题】:Service: optional dependencies服务:可选依赖项
【发布时间】:2023-03-12 13:40:02
【问题描述】:

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

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

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

现在当我调用 Foobar 的 foo() 方法时,我需要使 SERVICE_A 可用于 Foobar。我可以通过将 SERVICE_A 和 SERVICE_B 定义为 Foobar 的依赖项并在构造阶段将它们的创建委托给服务容器,使用 Foobar 的 setServiceA() 或 setServiceB() 方法等设置器从外部注入它们,或者将服务容器传递给Foobar 使其能够仅构建当前真正需要的服务。

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

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

【问题讨论】:

    标签: php symfony servicecontroller


    【解决方案1】:

    Lazy Services 正是您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2019-07-06
      • 2021-09-17
      相关资源
      最近更新 更多