У меня небольшая проблема с созданием моих сервисов в symfony 4.1
Я использую фабрики для создания своих сервисов и для того, чтобы заставить фабрику использовать ожидаемый метод, я создал интерфейс
<?php
namespace App\Service\Factory\Interfaces;
use App\Service\Interfaces\BaseModelServiceInterface;
use Doctrine\ODM\MongoDB\DocumentManager;
/**
* Interface ModelServiceFactoryInterfaces
* @package App\Service\Factory\Interfaces
*/
interface ModelServiceFactoryInterfaces
{
/**
* Create the Model related Service
*
* @return BaseModelServiceInterface
*/
public function createService(DocumentManager $dm);
}
Я получаю DocumentManager из сервисов с автоматической проводной связью, чтобы создать хранилище на фабрике и передать его службе, как это
/**
* Class ChapterServiceFactory
* @package App\Service\Factory
*/
class ChapterServiceFactory implements ModelServiceFactoryInterfaces
{
/**
* @param DocumentManager $dm
* @return ChapterService|BaseModelServiceInterface
*/
public function createService(DocumentManager $dm)
{
$chapterRepository = $dm->getRepository(Chapter::class);
/**
* @var $chapterRepository ChapterRepository
*/
return new ChapterService($chapterRepository);
}
}
Проблема в том, что если я хочу иметь другой сервис в моем сервисе ChapterService, я не могу автоматически подключить его в Factory из-за интерфейса, но я также не хочу удалять интерфейс.
Есть ли способ иметь "динамические аргументы" с Интерфейсом или другой способ, чем Интерфейс, чтобы заставить Заводы иметь метод createService?