如何解决用工厂创建的自动装配服务
根据官方文档, 自动装配可让您以最少的配置管理容器中的服务。它会读取构造函数(或其他方法)上的类型提示,并自动将正确的服务传递给每个方法。
因此,要获得服务,容器必须搜索与类型提示相对应的ID。
所以,这是我示例中的以下接口和类
interface ServiceInterface
{
public function doSomThing(): void;
}
class Service1 implements ServiceInterface {
public function doSomThing(): void
{
echo "service1";
}
}
class Service2 implements ServiceInterface {
public function doSomThing(): void
{
echo "service2";
}
}
class Service3 implements ServiceInterface {
public function doSomThing(): void
{
echo "service3";
}
}
//service.yml
DEL\Bundle\CoreBundle\Service\Base\Service1: ~
DEL\Bundle\CoreBundle\Service\Base\Service2: ~
DEL\Bundle\CoreBundle\Service\Base\Service3: ~
最后,这是工厂服务,它创建了一组实现接口 ServiceInterface 的类。
//service.yml
DEL\Bundle\CoreBundle\Service\Base\ServiceInterface:
autowire: false
factory: ['@delcore.factory.service',serviceChoice]
class ServiceFactory {
public function serviceChoice(string $param): ServiceInterface
{
switch ($param) {
case 'label1':
return new Service1();
break;
case 'label2':
return new Service2();
break;
case 'label3':
return new Service3();
break;
}
}
问题是该方法返回一个实现 ServiceInterface 的对象,而该容器无法通过“自动装配”找到。
我该怎么办?知道您不想从 service.interface 配置
中删除工厂条目版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。