如何注入实例到容器

如何注入实例到容器

在某些应用程序中,您可能需要将类实例作为服务注入,而不是将容器配置为创建一个新实例。

例如,内核服务被注入到容器中欧宝娱乐app下载地址内核类:

/ /……使用欧宝娱乐app下载地址Symfony \ \ HttpKernel \ KernelInterface组件使用欧宝娱乐app下载地址Symfony \ \ HttpKernel \ TerminableInterface组件摘要内核实现了KernelInterfaceTerminableInterface/ /……受保护的函数initializeContainer()无效/ /……这个美元->容器->“内核”这个美元);/ /……

调用在运行时设置的服务合成服务.必须配置此服务,以便容器在编译期间知道服务的存在(否则,服务依赖于内核将得到一个“服务不存在”的错误)。

为了做到这一点,在服务定义配置中将服务标记为合成的:

  • YAML
    1 2 3 4 5
    #配置/ services.yaml服务#合成服务不指定类app.synthetic_service合成真正的
  • XML
    12 3 4 5 6 7 8 9 10 11 12 13 14
    <!——配置/ services . xml——><?encoding="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/serviceshttps://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><!——合成服务不指定类——><服务id =“app.synthetic_service”合成=“真正的”/>> < /服务> < /容器
  • PHP
    1 2 3 4 5 6 7 8 9 10
    / /配置/ services.php名称空间欧宝娱乐app下载地址Symfony \ DependencyInjection \装载机\ \组件配置器返回函数ContainerConfigurator美元配置器美元服务美元配置器->服务();//合成服务没有指定一个类美元服务->“app.synthetic_service”->合成();};

现在,您可以使用容器::设置()

//实例化合成服务美元服务...美元的容器->“app.synthetic_service”美元服务);

这项工作,包括代码样本,是在一个创作共用BY-SA 3.0许可证。