Symfony2懒人服务何时使用?

时间:2015-01-07 07:52:42

标签: php symfony dependency-injection lazy-loading proxies

我对symfony2懒惰服务有疑问。什么时候应该使用懒惰的服务,何时应该避免使用它们?如果我们使用懒惰服务会有任何开销吗?

1 个答案:

答案 0 :(得分:4)

来自documentation

  

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

     

配置延迟服务就是一个答案。懒惰的服务,"代理"邮件服务实际上是注入的。它看起来和行为就像邮件程序一样,除了邮件程序实际上没有实例化,直到你以某种方式与代理交互。

是的,有一些开销。但它很少。当您不需要时,应避免使用懒惰服务。 (这很容易)。

实施例

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