Я использую 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?