Symfony 为什么我可以自动连接EntityManagerInterface而不是UserInterface

Symfony 为什么我可以自动连接EntityManagerInterface而不是UserInterface,symfony,symfony-3.4,Symfony,Symfony 3.4,我编写了一个简单的服务,它使用EntityManagerInterface,它正在工作,但当我尝试以类似的方式添加用户界面时,我得到了: 自动布线失败异常 无法自动连线服务“AppBundle\service\Pricer”:方法“\uuu construct()”的参数“$user”引用接口“Symfony\Component\Security\Core\user\UserInterface”,但不存在此类服务。无法自动注册,因为它来自不同的根命名空间 我的代码是: namespace App

我编写了一个简单的服务,它使用EntityManagerInterface,它正在工作,但当我尝试以类似的方式添加用户界面时,我得到了:

自动布线失败异常 无法自动连线服务“AppBundle\service\Pricer”:方法“\uuu 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作为参数(我可以获取存储库并进行一些查找查询)时,它就工作了。我的错误在哪里?

基本上是因为ORM为
EntityManagerInterface
提供了默认实现(即
EntityManager
,您可以查看),而Symfony没有使用
用户界面。这背后的原因是,
用户界面
是描述模型实体的契约/公共api的东西,而不是服务,因此这不适合服务注入的概念。

基本上是因为ORM为
EntityManagerInterface
(即
EntityManager
,您可以将其签出)而Symfony没有使用
UserInterface
。这背后的原因是
UserInterface
描述的是模型实体的契约/公共api,而不是服务,因此这不适合服务注入的概念。

因此,好的方法是通过方法的参数将用户对象直接传递给我需要的服务当然,我会提高我对服务注入概念的认识。检查一下如何获得当前用户(特别是第二个答案):因此,好的方法是通过方法的参数将用户对象直接传递给我需要的服务?当然,我将提高我对服务注入概念的了解。检查此项以了解如何获得当前用户(尤其是第二个答案):