我需要为Symfony 2.8应用程序配置自动装配。
服务依赖于Symfony\Component\Templating\EngineInterface
:
use Symfony\Component\Templating\EngineInterface;
class MyService
{
/** @var EngineInterface */
private $templating;
public function __construct(EngineInterface $templating)
{
$this->templating = $templating;
}
}
但是我明显得到一个错误,因为这个接口是在三个不同的类中实现的。
无法自动装入类型的参数 服务的“Symfony \ Component \ Templating \ EngineInterface” “为MyService”。多 存在的服务是接口(templating.engine.delegating, templating.engine.php,templating.engine.twig)。
我想在每次需要templating.engine.delegating
时注入EngineInterface
,因此我向service.yml
services:
template:
autowiring_type: 'Symfony\Component\Templating\EngineInterface'
alias: 'templating.engine.delegating'
但我仍然得到同样的错误 - 应用程序无法找到用于EngineInterface
所以问题是可以将接口连接到已定义的内核服务吗?
当必须将抽象类连接到服务时,我设法处理类似的问题。
服务:
use Doctrine\Common\Cache\CacheProvider;
class MyOtherService
{
/** @var CacheProvider */
private $cache;
public function __construct(CacheProvider $cache)
{
$this->cache = $cache;
}
}
services:
memcache_cache:
class: 'Doctrine\Common\Cache\MemcacheCache'
autowiring_types: 'Doctrine\Common\Cache\CacheProvider'
calls:
- [ setMemcache, ["@memcache"] ]
- [ setNamespace, ["%memcache.prefix%"] ]
所以,我已经创建了一个服务(memcache_cache
)并为它定义了一个autowiring_types。每次注入抽象CacheProvider时都应使用memcache_cache
。
但这很容易,因为这不是内核服务。我已在services.yml
中自行定义,而我无法通过添加templating.engine.delegating
autowiring_types: 'Symfony\Component\Templating\EngineInterface'
服务