给定以下类定义:
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>
感谢 Martin!
canCache
似乎是一个参数,而不是回调函数。这样做违反了单一职责原则。最好的方法可能是封装然后注入。 - Alexandru Olaru