我有一个基本的抽象服务,它依赖于依赖注入容器的请求。这里的定义是:
services:
acme.controller.abstract.basic:
class: "Acme\CommonBundle\Controller\AbstractBasicController"
abstract: true
calls:
- [setRequest, ["@request"]]
由于此服务定义需要请求范围,因此我将我的定义更改为:
services:
acme.controller.abstract.basic:
class: "Acme\CommonBundle\Controller\AbstractBasicController"
abstract: true
scope: request
calls:
- [setRequest, ["@request"]]
现在,我将此服务定义继承到具体服务中,如下所示:
services:
acme.controller.website:
class: "Acme\WebsiteBundle\Controller\WebsiteController"
parent: "acme.controller.abstract.basic"
但我得到一个例外,说acme.controller.website
的范围比请求对象更宽。要解决这个问题,我需要将scope: request
添加到我的具体服务中。但是,我原本认为范围定义将从基本抽象服务继承,因此没有必要将scope
参数重新添加到我的子服务中。
禁止继承scope
参数是否是预期的行为?如果是,也许您知道无法实施的原因吗?
答案 0 :(得分:1)
是的,这是预期的行为,但我还不知道具体原因。
// merge in parent definition
// purposely ignored attributes: scope, abstract, tags
$def->setClass($parentDef->getClass());
$def->setArguments($parentDef->getArguments());
$def->setMethodCalls($parentDef->getMethodCalls());
$def->setProperties($parentDef->getProperties());