我有一个非常奇怪的问题,似乎违背了文档。
为了我的单元测试,我尝试将特定的服务可见性设置为“public”。但这根本不起作用。
# config/services.yaml
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
App\Service\Common\TokenService:
public: true
但是当我试图模拟它时,我仍然在测试中得到这个错误:
Symfony\Component\DependencyInjection\Exception\InvalidArgumentException:“App\Service\Common\TokenService”服务是私有的,您无法替换它。
当我运行这个命令php bin/console debug:container TokenService
时,我得到以下结果:
---------------- ---------------------------------
Option Value
---------------- ---------------------------------
Service ID App\Service\Common\TokenService
Class App\Service\Common\TokenService
Tags -
Public no <==== WHY ?
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired yes
Autoconfigured yes
如果我设置“public:true”below _defaults它工作,但这不是我想要的。
1条答案
按热度按时间wqnecbli1#
这里的问题是,服务的顺序很重要。
您的配置将创建您的服务并将其公开,但稍后您会有一些类似于以下的行:
服务将被再次创建,并覆盖您之前的声明,使其再次成为非公共的。
把你的配置放在这一行后面。