懒惰的服务

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.0,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

懒惰的服务

为什么是惰性服务?

在某些情况下,您可能希望注入一个实例化起来有点重,但并不总是在对象中使用的服务。例如,假设你有一个欧宝app在哪里找NewsletterManager然后注入梅勒服务。只有几个方法对你欧宝app在哪里找NewsletterManager实际上使用梅勒,但即使当你不需要它,一个梅勒服务总是被实例化,以便构造您的欧宝app在哪里找NewsletterManager

配置惰性服务是解决这个问题的方法之一。的“代理”梅勒服务实际上是注入的。它的外观和作用就像梅勒,除了梅勒直到以某种方式与代理交互时才实际实例化。

安装

为了使用惰性服务实例化,首先需要安装ocramius /代理管理器包:

1
请求ocramius/proxy-manager

请注意

如果不使用全堆栈框架,还必须安装ProxyManager桥

1
$ composer require 欧宝娱乐app下载地址symfony/proxy-manager-bridge

配置

您可以将该服务标记为懒惰的通过改变它的定义:

  • YAML
  • XML
  • PHP
1 2 3 4
服务:app.twig_extension:类:AppBundle \树枝\ AppExtension懒惰:真正的

一旦您将服务注入到另一个服务中,就会生成一个虚拟服务代理应该使用表示服务的类的相同签名进行注入。打电话的时候也是一样容器:get ()直接。

一旦你尝试与服务交互(例如调用它的一个方法),实际的类就会被实例化。

要检查你的代理是否工作,你可以简单地检查接收对象的接口:

1 2
转储(class_implements (服务));//输出应该包括"ProxyManager\Proxy\LazyLoadingInterface"

请注意

如果不安装ProxyManager桥ocramius /代理管理器时,容器将跳过懒惰的标记,并像通常那样简单地实例化服务。

额外的资源

中,可以阅读有关如何实例化、生成和初始化代理的更多信息欧宝体育电话ProxyManager的文档

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。