到目前为止,我已经找到了两种注入服务的方法
方法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中,因此它限制了依赖性。有人可以解释一下这个区别吗?
答案 0 :(得分:2)
不同之处在于第一个模式称为Dependency Injection(在您的情况下特别是构造函数注入),而另一个模式恰恰相反,即Service Locator。
服务定位器模式有很多缺点,它是generally considered to be an anti-pattern。