gpt4 book ai didi

Symfony AutoWire 多个服务同一类

转载 作者:行者123 更新时间:2023-12-02 16:40:59 25 4
gpt4 key购买 nike

我正在将大型应用程序升级到 4.2

并且 Controller 内部的 $this->get(".....") 已被弃用,应该使用 AutoWire 代替。

我遇到的问题是我有两个服务,它们实际上来自同一个类(只是不同的构造函数参数)。

服务.yml

services:
service.a:
class: Namespace\MyClass
arguments: [ "argument1" ]

service.b:
class: Namespace\MyClass
arguments: [ "argument2" ]

Controller :

public function demoAction() {
$serviceA = $this->get("service.a");
$serviceB = $this->get("service.b");
}

以及有问题的结果:

public function demoAction(MyClass $serviceA, MyClass $serviceB) {
}

我们可以使用别名来服务定义,例如:

MyClass: '@service.a'

但我不能使用虚拟/假类(没有现有的类):

MyPseudClass: '@service.b'

如何在 Autowiring 模式下处理此类情况?

我可以创建从基础扩展的“伪”类,只是为了获得不同的类名,但这感觉很奇怪。

最佳答案

从 4.2 开始,您可以定义命名的 Autowiring 别名。这应该有效:

services:
Namespace\MyClass $serviceA: '@service.a'
Namespace\MyClass $serviceB: '@service.b'

使用 Symfony 3.4 和 4.1,您可以使用绑定(bind)来代替 - 但这不太具体,因为它没有考虑类型:

services:
_defaults:
bind:
$serviceA: '@service.a'
$serviceB: '@service.b'

关于Symfony AutoWire 多个服务同一类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53556134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com