懒惰的服务

懒惰的服务

也可以看看

通过a懒洋地注入服务的另一种方法是通过服务用户

为什么懒惰的服务?

在某些情况下,您可能想要注入一个沉重的服务来实例化,但并不总是在您的对象内使用。例如,想象一下你有一个欧宝app在哪里找新闻稿你注射了一个邮箱服务进入它。你的几种方法欧宝app在哪里找新闻稿实际上使用了邮箱,但即使你不需要它,一个邮箱始终实例化服务以构建您的欧宝app在哪里找新闻稿

配置Lazy Services是一个答案。有一个懒惰的服务,一个“代理”的邮箱实际注入服务。它看起来像是这样的邮箱,除了邮箱在您以某种方式与代理互动之前,实际上并不实例化。

警告

懒惰的服务不支持最终的课程。

安装

为了使用延迟服务实例化,您需要安装欧宝娱乐app下载地址Symfony / Proxy-Manager-Bridge包裹:

1
$Composer要求Symfony欧宝娱乐app下载地址 / Proxy-Manager-Bridge

配置

您可以将服务标记为懒惰的通过操纵其定义:

  • yaml.
    1 2 3 4
    #配置/服务.YAML服务app \ twig \ appextension懒惰的真的
  • XML.
    1 2 3 4 5 6 7 8 9 10 11
    <! -  config / services.xml  - ><?XML Version =“1.0”编码=“UTF-8”?><容器XMLNS =.“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”XMLNS:XSI =“http://www.w3.org/2001/xmlschema-instance”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd“><服务><服务ID =“app \ twig \ appextension”懒惰=“真的”/>
  • PHP.
    1 2 3 4 5 6 7 8 9 10
    // config / services.php命名空间欧宝娱乐app下载地址Symfony \ Component \ DependencyIngreation \ Loader \ Configurator;app \ twig \ appextension;返回功能containerconfigurator$ Configurator.{$服务=$ Configurator.- >服务();$服务- >AppExtension.::班级- >懒惰的();};

将服务注入另一个服务后,虚拟代理人对于表示服务的类的相同签名,应注入该类。呼叫时也是如此容器:: get()直接地。

当您尝试与服务交互(例如,调用其中一个方法时,将立即实例化实际类。

要检查您的代理程序是否可以检查所接收对象的接口:

倾倒class_implements.$服务));//输出应包括“proxymanager \ proxy \ lazyloadinginterface”

笔记

如果你没有安装ProxyManager桥梁,容器将跳过懒惰的标志并直接实例化服务,因为它通常会这样做。

额外资源

您可以了解有关如何实例化,生成和初始化的代理欧宝体育电话ProxyManager的文档

这项工作包括代码样本,是在a下获得的许可Creative Commons by-SA 3.0执照。