Symfony D Я передаю новый экземпляр с аргументами конструктору, не создавая псевдонимов bazillion? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть супер полезный класс B, который имеет конструктор с одним аргументом.

Я буду использовать этот класс несколько раз при определении других служб в Symfony DI.

Как можно ли избежать дублирования B определения службы N раз для создания псевдонимов?

псевдокод, который я хотел бы использовать:

A:
 aruguments:
  $someList:
   - B 'b1'
   - B 'b2'
   - B 'b3'
C:
 arguments:
  $someOtherList:
   - B 'b4'
   - B 'b999'
   - ...
D:
...

Почему у меня так много B х? Потому что в моем алгоритме повторяется поведение, и B с одним аргументом через конструктор достаточно, чтобы никогда не повторить такое поведение.

Почему я не могу свернуть B в A или C? A и C являются классами стиля коллекции / контейнера, и у меня их будет много. Будет ли взрываться в классах, создаваемых для каждой комбинации.

Какой код я бы написал без DI?

new A([
 new B('b1'),
 new B('b2'),
 new B('b3'),
]);

...

new C([
 new B('b4'),
 new B('b99'),
 ...
]);

...

new D([
 ...

Итак, как мне написать эквивалентные symfony определения службы?

1 Ответ

0 голосов
/ 12 марта 2020

Решение, которое я нашел, это определения встроенных сервисов!

Вы можете сделать это, добавив !service к объекту, содержащему необходимые данные:

A:
 aruguments:
  $someList:
   - !service { class:B, arguments: ['b1']}
   - !service { class:B, arguments: ['b2']}
   - !service { class:B, arguments: ['b3']}
C:
 arguments:
  $someOtherList:
   - !service { class:B, arguments: ['b4']}
   - !service { class:B, arguments: ['b999']}
   - ...
D:
...