我无法将服务转移到数组中的另一个服务中。
例如这是我的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 作为参数传递 - 但我想避免注入容器。