Внедрение зависимостей Symfony: как динамически внедрить правильную реализацию интерфейса на основе контекста? ⇐ Php

Кемеровские программисты php общаются здесь
Anonymous
Внедрение зависимостей Symfony: как динамически внедрить правильную реализацию интерфейса на основе контекста?

Сообщение Anonymous »

Я использую компонент symfony/dependent-injection:^5.4 в своем проекте, и у меня есть сценарий, в котором мне нужно внедрить различные реализации интерфейса в зависимости от контекста.Вот моя настройка:
  • У меня есть две службы: PasswordSetter100 и PasswordSetter200, обе реализующие PasswordSetterInterface.
  • Эти службы следуют внутреннему соглашению об именах, и правильная реализация выбирается динамически в зависимости от контекста.
  • Я использую фабрика ByTenantFactory, которая зависит от контейнера и решает, какую реализацию использовать на основе определенных переменных.
В моем UserController, я хочу внедрить PasswordSetterInterface и заставить Symfony автоматически предоставлять правильную реализацию в зависимости от контекста.
Вот конфигурация сервиса, которая, по моему мнению, подойдет:

Код: Выделить всё

services:
PasswordSetterInterface:
factory: ['@ByTenantFactory', 'create']

ByTenantFactory:
class: App\Factory\ByTenantFactory
arguments:
- '@service_container'

# All controllers are autowired services
Однако, когда я пробую эту настройку, контейнер Symfony жалуется, что мне нужно выбрать, какую реализацию внедрить для PasswordSetterInterface.
Это есть ли способ заставить это работать без явного указания, какую реализацию использовать в конфигурации служб?

Подробнее здесь: https://stackoverflow.com/questions/791 ... plementati

Вернуться в «Php»