Внедрение зависимостей 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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