我尝试找出如何手动注入参数DefaultController
(没有自动装配)。
我发现有两种方法可以实现这一目标。
我可以用arguments
:
services:
_defaults:
autowire: false
autoconfigure: true
public: true
App\Service\SomeService: ~
App\Controller\DefaultController:
arguments: #!
$service: '@App\Service\SomeService'
$scalar: 22
除此之外,我还可以使用bind
key:
services:
_defaults:
autowire: false
autoconfigure: true
public: true
App\Service\SomeService: ~
App\Controller\DefaultController:
bind: #!
$service: '@App\Service\SomeService'
$scalar: 22
我的控制器:
class DefaultController extends Controller
{
public function __construct($service, $scalar)
{
var_dump(get_class($service), $scalar);
}
...
两个选项产生相同的输出:
字符串(23)“应用程序\服务\SomeService”
整数(22)
那么这两个配置键有什么区别arguments
and bind
,他们做同样的事情吗?
bind
通常用于_defaults
部分来替换该文件定义的服务中任何匹配的参数名称。
因此,从第二个示例中获取变量名称,并将它们放入更常用的中_defaults:
stanza
_defaults:
# autowire / autoconfig, etc
bind: #!
$service: '@App\Service\SomeService'
$scalar: 22
具有这些变量名称的任何服务都将被服务或标量值 (22) 替换(除非本地覆盖)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)