symfony – Service(使用服务工厂)返回不同类型的对象

我需要创建一个服务,它使用另一个工厂服务,并返回不同类型的对象.

这是我的服务定义:

services:
    games.search_factory:
        class: %games.search_factory.class%
        calls:
           - [ setContainer, ["@service_container"] ]

    games.search:
        class: %games.search.base.class%
        factory_service: games.search_factory
        factory_method: get

我的%games.search_factory.class%get方法根据请求参数返回不同的对象.
我的%games.search.base.class%是抽象的.
我的目标是 – 当我打电话时

$this->get("games.search");  

我想得到工厂方法的结果.但是当我运行代码时,我收到一个错误:FatalErrorException:错误:无法实例化抽象类.

所以我有两个问题:

>为什么DI系统尝试实例化我的类,而不是返回我的工厂方法的结果?
>有没有办法实现我需要的(简洁和简洁)?

更新:我的代码部分有一个错误,这里没有显示.除了这两个搜索服务外,我还为每种搜索类型提供了服务,并从工厂返回这些服务.但是在这些服务的定义中,我使用了我的基类(它是抽象的)作为一个类.

如此好的结论是,可以从工厂返回不同类型的对象.

最佳答案 从这里:
http://symfony.com/doc/current/components/dependency_injection/factories.html

When you specify the class to use for the factory (via factory_class)
the method will be called statically.
If the factory itself should be instantiated and the resulting object’s method called
(as in this example), configure the factory itself as a service

为了将容器注入工厂,您需要使工厂可以实现(不是抽象),或者将容器作为参数传递给静态get方法.我不知道有任何方法可以将服务声明为静态.

点赞