繁体   English   中英

Symfony4将EntityManagerInterface注入框架不可知类

[英]Symfony4 Inject EntityManagerInterface into framework agnostic class

我尝试创建“框架无关”业务类。 这意味着,我的类不应该对任何框架类,只有项目依赖项有任何引用。

我尝试了以下代码,service.yml中的typehint没有成功...

这是我的自定义界面:

namespace App\Interfaces;

interface EntityManagerInterface extends \Doctrine\ORM\EntityManagerInterface
{
}

在这里我的框架不可知的业务

use App\Interfaces\EntityManagerInterface;

class MyBusiness
{
    public function __construct(EntityManagerInterface $em)
    {
        ...
    }
}

这里是我注入EntityManager的控制器:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;

class testController extends AbstractController
{
    public function testAction(EntityManagerInterface $em)
    {
        $myBusiness = new MyBusiness($em);
    }
}

因此,我为注入错误的类而得到PHP错误:

Argument 1 passed to App\Business\MyBusiness::__construct() must implement interface App\Interfaces\EntityManagerInterface, instance of Doctrine\ORM\EntityManager given, called in /var/www/src/Controller/testController.php on line 7

如何正确地将EntityManager注入我的框架无关的业务?

谢谢

因为你传递了Doctrine的EntityManager ,它显然没有实现你的接口。

我真的不明白这样做的意义,因为并非所有Framework的“EntityManager”都是一样的。

但我能做的第一件事就是制作某种“ Adapter ”,它将传递的EntityManager封装在你自己的Class中,实现你自己的EntityManagerInterface ,然后将它传递给你的Business。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM