如何将可调用注入Symfon2依赖注入容器服务

时间:2015-04-22 09:13:53

标签: symfony dependency-injection guzzle

给出以下类定义

class CacheSubscriber implements SubscriberInterface
{
    public function __construct(
        CacheStorageInterface $cache,
        callable $canCache
    ) {
        $this->storage = $cache;
        $this->canCache = $canCache;
    }

我想将此类定义为Symfony2 DIC中的服务。

虽然相对清楚如何处理第一个参数

<service id="nsp_generic.guzzle.subscriber.cache" class="GuzzleHttp\Subscriber\Cache\CacheSubscriber">
    <argument type="service" id="nsp_generic.redis.cache"/>
    <!-- ??? -->
</service>

如何定义和注入第二个参数?

更新

用户meckhardt将此推向了正确的方向。

助手班

<?php

namespace Nsp\GenericBundle\Service\Cache;

class CacheConfig {
    public static function canCache() {
        return true;
    }
}

服务定义

<service id="nsp_generic.guzzle.subscriber.cache" class="GuzzleHttp\Subscriber\Cache\CacheSubscriber">
    <argument type="service" id="nsp_generic.guzzle.subscriber.cache.storage"/>
    <argument type="collection">
        <argument>Nsp\GenericBundle\Service\Cache\CacheConfig</argument>
        <argument>canCache</argument>
    </argument>
</service>

谢谢马丁!

2 个答案:

答案 0 :(得分:2)

尝试

<argument type="collection">
    <argument>ClassName::staticMethod</argument>
</argument>

<argument type="collection">
    <argument type="service" id="serviceId" />
    <argument>instanceMethodName</argument>
</argument>

http://php.net/manual/de/language.types.callable.php

答案 1 :(得分:0)

也许像这个示例中那样创建一个依赖注入工厂:docs
这将返回你的可赎回。