依赖注入方法Symfony2

时间:2017-01-22 11:24:56

标签: symfony dependency-injection

到目前为止,我已经找到了两种注入服务的方法

方法A:

public function __construct($entityManager, $mailer, $templating,$notificationManager,$taskManager,$leadNotificationManager,$dealNotificationManager,$taskNotificationManager) 
{
    $this->mailer = $mailer;
    $this->em = $entityManager;
    $this->templating = $templating;
    $this->notificationManager = $notificationManager;
    $this->taskManager= $taskManager;
    $this->leadNotificationManager = $leadNotificationManager;
    $this->dealNotificationManager = $dealNotificationManager;
    $this->taskNotificationManager = $notificationManager;

}

在这种情况下,我将使用以下服务

$this->mailer->send($message);  

方法B:

public function __construct(ContainerInterface $container) 
{
    $this->container = $container;
}

并按以下方式使用

$this->container->get('crm_sandbox_google_calendar')->markDone($entity)

方法A看起来更具体,但如果服务B包含服务A [循环]

,则它将服务B包括在服务B中,因此它限制了依赖性。

有人可以解释一下这个区别吗?

1 个答案:

答案 0 :(得分:2)

不同之处在于第一个模式称为Dependency Injection(在您的情况下特别是构造函数注入),而另一个模式恰恰相反,即Service Locator

服务定位器模式有很多缺点,它是generally considered to be an anti-pattern