用工厂创建的自动装配服务

问题描述

根据官方文档, 自动装配可让您以最少的配置管理容器中的服务。它会读取构造函数(或其他方法)上的类型提示,并自动将正确的服务传递给每个方法

因此,要获得服务,容器必须搜索与类型提示相对应的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 (将#修改为@)