我写了一个使用EntityManagerInterface的简单服务并且它正在工作但是当我以类似的方式尝试添加UserInterface我得到:
AutowiringFailedException 无法自动服务“AppBundle \ Service \ Pricer”:方法“__construct()”的参数“$ user”引用接口“Symfony \ Component \ Security \ Core \ User \ UserInterface”但不存在此类服务。它不能自动注册,因为它来自不同的根命名空间。
我的代码是:
namespace AppBundle\Service;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\User\UserInterface;
class Pricer
{
private $em;
private $user;
public function __construct(EntityManagerInterface $em, UserInterface $user)
{
$this->em = $em;
$this->user = $user;
}
}
当我只有EntityManagerInterface作为参数时,它正在工作(我可以获取存储库并进行一些查找查询)。我的错误在哪里?
答案 0 :(得分:5)
基本上,因为Doctrine ORM为EntityManagerInterface
提供了一个默认实现(即EntityManager
,您可以查看here),而Symfony则没有UserInterface
。这背后的原因是UserInterface
是描述模型实体的合同/公共API的东西,而不是服务,所以这不符合服务注入的概念。