问题描述
根据官方文档, 自动装配可让您以最少的配置管理容器中的服务。它会读取构造函数(或其他方法)上的类型提示,并自动将正确的服务传递给每个方法。
所以,这是我示例中的以下接口和类
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 (将#修改为@)