Symfony2懒人服务何时使用?

Ash*_*thi 6 php dependency-injection lazy-loading proxies symfony

我有一个关于symfony2懒惰服务的问题.什么时候应该使用懒惰的服务,何时应该避免使用它们?如果我们使用懒惰服务,是否有任何开销?

Tob*_*olm 5

文档

在某些情况下,您可能想要注入一个有点难以实例化的服务,但并不总是在您的对象中使用。例如,假设您有一个 NewsletterManager 并向其中注入邮件服务。NewsletterManager 上只有少数方法实际使用邮件程序,但即使您不需要它,邮件程序服务也总是被实例化以构建您的 NewsletterManager。

配置惰性服务就是解决这个问题的一种方法。对于惰性服务,实际上注入了邮件程序服务的“代理”。它的外观和行为就像邮件程序一样,不同之处在于邮件程序在您以某种方式与代理交互之前不会实际实例化。

是的,有一些开销。但它是最小的。当您不需要它们时,您应该避免使用惰性服务。(就这么简单)。

例子:

如果您的服务 A 有 3 个方法并且依赖于 B 和 C。如果您知道 B 用于所有 3 种方法而 C i 仅用于一种方法,那么您可以考虑将 C 声明为惰性。如果 C 是一项繁重的服务,您应该声明它具有惰性。在这个例子中,将 B 声明为惰性不会有任何好处......所以不要......=)