1

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

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,即使其中一个不会被调用。第二种选择显然是错误的,因为它将服务基础设施暴露给外部世界。第三个选项也不好,因为它使服务依赖于整个服务容器,这使得代码难以测试等。

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

4

1 回答 1

4

懒惰的服务正是您正在寻找的。

于 2013-09-03T09:42:53.127 回答