Я хотел бы знать, есть ли способ (в пределах разумного) вручную ленивую загрузку службы на вашей настраиваемой фабрике после сборки DIC. Я пока ничего не нашел ни в документации, ни на ТАК. Вот объяснение того, чего я хочу достичь:
class ExampleFactory
{
.
.
.
public function create()
{
return new Example(new LazyLoadedDependency());
}
.
.
.
}
Итак, у меня есть фабрика для класса Example, и этот класс примера принимает зависимость, которую я хотел бы загружать лениво.
Если я установлю для LazyLoadedDependency () значение lazy: true в моем services.yml, конечно, это не будет работать, потому что я использую эту фабрику после сборки DIC. Поэтому, когда я пытаюсь обновить его, он всегда будет полностью инициализирован. Я бы хотел заставить Symfony загружать это лениво. Я видел пару файлов в собственном коде Symfony, но, похоже, это более сложная вещь.
Кто-нибудь знает как это сделать? Каждый совет о том, как я могу это сделать, будет большим подспорьем.
Написал свой собственный конвертер параметров, и он создает для меня специальный класс Request (там я использую factory, он создается только тогда, когда мне это нужно). Я использую его для перемещения данных, у него также есть особые возможности. Под этим я подразумеваю возможность сериализации данных в массив или другой формат (поэтому я просто выполняю $ request-> toArray ()). Для этого мне нужно передать в него новый экземпляр сериализатора, когда я создаю свой класс Request. Я просто хочу сделать его максимально легким. Надеюсь, у меня не получилось размыто. Если у вас есть еще вопросы, просто задавайте.
Не могли бы вы сделать свою фабрику службой самостоятельно, передать контейнер и получить ленивую загруженную службу при создании нового экземпляра?
Я попробую это. А пока у меня есть вопрос. Разве это не поражение цели всего этого? Я имею в виду, я думаю, что это довольно тяжелое решение, а не хорошая практика?
Итак, я пробовал это, и даже когда он установлен на ленивый (также должен быть установлен как общедоступный, потому что по умолчанию в Symfony 4 службы являются частными), я получаю полностью инициализированный объект.




Зачем нужны нестандартные фабрики, если у вас есть DI? Вы ищете
shared: falseв определении вашего сервиса?