我的目标是将data_collector添加到我的类中,以便在开发人员工具栏上显示一些有用的信息。 我的服务:
services:
my_api.auth.login:
class: YO\ApiV1\Services\Auth\Login
arguments:
- requestId
- "@old_sound_rabbit_mq.login_rpc"
- "@service_container"
scope: prototype
我需要范围原型为每个新调用设置不同的实例。顺便说一句,service @ old_sound_rabbit_mq.login_rpc也有范围“prototype”。 并且,我想附加data_collector,可以使用:
tags:
- { name: data_collector, template: "AcmeDebug:Collector:templatename", id: "your_collector_name" }
但后来我有一个例外:
ScopeCrossingInjectionException:检测到Scope Crossing Injection: 定义“profiler”引用服务“my_api.auth.login” 属于另一个范围层次结构。这项服务可能不是 始终可用。一般来说,移动它更安全 将“profiler”定义为范围“prototype”,或将“container”声明为 儿童范围的“原型”。如果可以肯定其他范围 永远是活动的,您可以设置对strict = false的引用来摆脱 这个错误。
它让我困惑,因为我不知道该怎么做。我试图设置属性“strict = false”,但没有任何反应。
答案 0 :(得分:6)
我猜symfony的同步服务可以帮助您:doc
否则你可以设置" strict = false"这样:
services:
my.service.definition:
class: Acme\Services\BlaService
arguments:
- "@any_other_service_from_narrower_scope="
scope: prototype
" ="在服务定义结束时,从较窄的范围注入服务时,将转向" strict"为假
答案 1 :(得分:1)
Symfony 2.8之后的容器范围已被弃用。
scope: prototype
已被shared: false
http://symfony.com/doc/2.8/cookbook/service_container/shared.html