为什么我可以自动装配 EntityManagerInterface 但不能自动装配 UserInterface
Why can I autowire EntityManagerInterface but not UserInterface
我编写了使用 EntityManagerInterface 的简单服务,它正在工作,但是当我以类似的方式尝试添加 UserInterface 时,我得到:
AutowiringFailedException
Cannot autowire service "AppBundle\Service\Pricer": argument "$user" of method "__construct()" references interface "Symfony\Component\Security\Core\User\UserInterface" but no such service exists. It cannot be auto-registered because it is from a different root namespace.
我的代码是:
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 作为参数时(我可以获取存储库并进行一些查找查询),它可以正常工作。我的错误在哪里?
基本上是因为 Doctrine ORM 为 EntityManagerInterface
提供了默认实现(即 EntityManager
,你可以查看 here),而 Symfony 没有提供 UserInterface
.这背后的原因是 UserInterface
是描述模型实体的 contract/public api 的东西,而不是服务,因此这不适合服务注入的概念。
我编写了使用 EntityManagerInterface 的简单服务,它正在工作,但是当我以类似的方式尝试添加 UserInterface 时,我得到:
AutowiringFailedException Cannot autowire service "AppBundle\Service\Pricer": argument "$user" of method "__construct()" references interface "Symfony\Component\Security\Core\User\UserInterface" but no such service exists. It cannot be auto-registered because it is from a different root namespace.
我的代码是:
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 作为参数时(我可以获取存储库并进行一些查找查询),它可以正常工作。我的错误在哪里?
基本上是因为 Doctrine ORM 为 EntityManagerInterface
提供了默认实现(即 EntityManager
,你可以查看 here),而 Symfony 没有提供 UserInterface
.这背后的原因是 UserInterface
是描述模型实体的 contract/public api 的东西,而不是服务,因此这不适合服务注入的概念。