Как я могу создать новый MyService () с помощью autowire? - PullRequest
0 голосов
/ 08 мая 2020

Мне нравится автоматическое подключение , это определенно самое элегантное решение для управления зависимостями, которое я когда-либо видел. Я хотел бы также использовать его при создании экземпляров новых объектов.

Рассмотрим следующий сервис:

class MyService()
{
    public function __construct(Dependency1 $var1, Dependency99 $var99)
    {
        ...
    }
}

Это когда я его использую:

class AnotherService
{
    public function buildServices(array $arrData)
    {
        $arrMyServices = [];
        foreach($arrData as $data) {

                                    // I want to autowire this!
            $arrMyServices[] = (new MyService($var1, $var99))
                                    ->loadData($data);
        }

        return $arrMyServices;
    }
}

Вопрос это примерно строка ниже // I want to autowire this!. Я не хочу передавать здесь зависимость вручную , а хочу создать новую службу с автоматическим подключением. В идеале я бы позвонил $symfony->createMyService() и получил бы новый экземпляр моей службы, подключенный автоматически.

ATM Я буквально создал фабричный метод вроде createMyService(), но это отстой. Есть ли способ сделать это «Symfony»?

Изменить: к сожалению, похоже, я не смог очень хорошо объяснить свой вопрос. Виноват. Давайте попробуем повторить это так:

Как создать экземпляр нескольких служб, требующих различных зависимостей в al oop? Пожалуйста, ответьте на этот конкретный c вопрос, спасибо!

1 Ответ

0 голосов
/ 08 мая 2020

Вы не можете сделать это с помощью автоподключения.

Если я правильно понял ваш вопрос, вы должны объявить свой MyService как не общий (shared: false в services.yaml) и воспользоваться услугой контейнер для создания экземпляра нового объекта MyService в каждом цикле.

Пример:

class AnotherService implement ContainerAwareInterface
{
    use ContainerAwareTrait;

    public function buildServices()
    {
        for ($i = 0; $i < 99; ++$i) {
            // This will be a new instance on every cycle if shared is set to false
            yield $this->container->get(MyService::class);
        }
    }
}

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