Symfony 6:无法自动注入SteamAPIRepository服务问题排查
问题原因及解决办法
你的配置错误出在服务ID的写法上:你使用了App\Service\Steam\SteamAPIRepository\: (末尾带冒号)的语法,这种写法是用来批量加载整个命名空间/目录下所有类的,但你指定的resource是单个文件,导致容器无法正确匹配到该服务的绑定规则,进而无法注入$apiKey参数。
下面是两种可行的修正方案:
方案1:针对单个服务配置
直接使用完整类名作为服务ID(去掉末尾冒号),绑定参数:
parameters: steam.apiKey: 'myapikey' services: # 确保_defaults已开启自动注入(你之前能正常注入,应该已经配置过) _defaults: autowire: true autoconfigure: true App\Service\Steam\SteamAPIRepository: bind: $apiKey: '%steam.apiKey%'
方案2:批量加载目录下的服务
如果Steam目录下还有其他服务类,可以用目录批量加载的方式,此时resource指向目录而非单个文件:
parameters: steam.apiKey: 'myapikey' services: _defaults: autowire: true autoconfigure: true App\Service\Steam\: resource: '../src/Service/Steam/' bind: $apiKey: '%steam.apiKey%'
额外优化:全局默认绑定
如果多个服务都需要$apiKey参数,可以直接在_defaults里配置全局绑定,无需单独给每个服务设置:
parameters: steam.apiKey: 'myapikey' services: _defaults: autowire: true autoconfigure: true bind: $apiKey: '%steam.apiKey%' App\Service\Steam\: resource: '../src/Service/Steam/'
配置完成后,可执行bin/console debug:container App\Service\Steam\SteamAPIRepository命令,查看服务的参数绑定是否生效。
内容的提问来源于stack exchange,提问作者DannyXCII
相关产品推荐
相关产品推荐

