0

我无法将服务转移到数组中的另一个服务中。

例如这是我的config.yml

services:
    car.price.calculator:
        class:        My\SuperBundle\CarCalculator
        arguments:    "something"

product_viewer:
    car:
        rest_client: "@car.price.calculator"  # <- this is the service I cannot transfer
        rest_url: http://example.com

service.xml

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="product.browser" class="Mrok\ShopBundle\Price\Calculator">
            <argument key="car" type="collection">
                <argument key="rest_client">%product.browser.rest_client%</argument>
                <argument key="rest_url">%product.browser.rest_url%</argument>
            </argument>
        </service>
    </services>
</container>

我的 MrokShopExtension 将配置中的数据重写为容器参数,例如

 $container->setParameter('product.browser.rest_client', $config[0]['car']['rest_client']); 

Calculator班级:

class Calculator {

private $set;

public function __contruct(array $set) {
    $this->set = $set;
    var_dump($set);
}

结果我得到(var_dump来自代码):

   array (size=2)
     'rest_client' => string '@car.price.calculator' <- and here is a problem, it is a string, should be object

如何而不是将字符串作为rest_client获取类实例(服务)。我无法将论点更改为:

<argument type="service" id="car.price.calculator" />

因为我不知道最终用户会注入什么样的服务。

我知道我可以将整个容器和服务 ID 作为参数传递 - 但我想避免注入容器。

4

0 回答 0