Предположим, у меня есть интерфейс ThingInterface
и две реализации Thing
и MockThing
.Теперь, предполагая, что я использую внедрение зависимостей, и я запрограммирован на ThingInterface
, тогда в Symfony я могу сказать ему, какую реализацию использовать, следующим образом:
services:
...
ThingInterface: '@Thing'
...
Можно ли выбрать и использовать реализацию на основепараметр?Например:
parameters:
useMock: 'true'
services:
...
# ThingInterface maps to ThingMock or Thing based on useMock parameter
ThingInterface: '@ThingMock'
...
Я использую symfony 3.4 .
В этом контексте у меня будет несколько служб, и я хочу легко переключатьсямежду фактической реализацией и проверенной версией.Я могу сделать это индивидуально для каждой службы, но я надеялся, что смогу сделать это с помощью параметра 'toggle'.
Я нашел this , который приводит этот пример:
services:
AppBundle\Mailer:
arguments: ["@=container.hasParameter('some_param') ? parameter('some_param') : 'default_value'"]
Но мне не удалось заставить его работать для сопоставления интерфейсов с реализациями:
parameters:
useMock: 'true'
services:
...
# ThingInterface maps to ThingMock or Thing based on useMock parameter
ThingInterface: '@ThingMock'
ThingInterface: ["@=container.getParameter('useMock') ? service('ThingMock') : service('Thing')"]
...