Суть описана в заголовке, но приведу пример.
Правильно ли внедрять зависимости подобным образом?
class A {
public function __constructor(ContainerInterface $container) {
$this->container = $container;
}
public function foo(): void
{
// требуемая зависимость
/** @var ServiceClass $someService */
$someService = $this->container->get(ServiceClassInterface::class);
// ... логика
}
}
Или же стоит извне передавать в конструктор класса нужные нам зависимости, которые мы заранее получили из DI-контейнера?
При отсутствии DI-контейнера, само собой, лучше внедрять через конструктор. Но так как мы используем контейнер, в котором определены интерфейсы с их реализациями, необходимость внедрения каждого сервиса через конструктор отпадает, не так ли?