Рекурсивно внедрять сервисы в Laravel - PullRequest
0 голосов
/ 06 мая 2020

Я использую Laravel 5.2.45. Я использую внедрение зависимостей для своих сервисов. Теперь есть service A, которому требуется service B, поэтому я вставляю service B в A. Кроме того, в service B есть методы, которым требуется service A, поэтому я также ввел service A в B. Однако эта конфигурация, похоже, создает проблему. Это моя реализация:

class AService
{
  /**
   * @var BService
   */
  protected $bService;

  public function __construct(BService $bService) {
    $this->bService = $bService;
  }
}

class BService
{
  /**
   * @var AService
   */
  protected $aService;

  public function __construct(AService $aService) {
    $this->aService = $aService;
  }
}

Сначала я заметил, что мои маршруты не работают, поэтому я попытался проверить их с помощью:

php artisan route:list

И я получил:

PHP Неустранимая ошибка: разрешенный размер памяти 134217728 байт исчерпан (попытался выделить 4096 байт) в / var / www/tacnet-plus/bootstrap/cache/compiled.php в строке 1426 Ошибка сегментации (дамп ядра)

Кажется что эта конфигурация создает переполнение памяти. Я подозреваю, что первая служба создает вторую, а вторая создает первую на неопределенный срок. В прошлом у меня была такая же проблема с Java Spring, и я знаю, что вы можете внедрить свои службы туда с помощью установщика вместо конструктора, чтобы избежать создания зависимости в конструкторе и внедрить службу по запросу через установщик. Есть ли что-то подобное в Laravel?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...