можно собрать сервис фабрикой подобным образом:
App\Service\ExampleService:
factory: ['@App\Service\ExampleServiceFactory', createServiceByExampleArg]
arguments: ['@argexample']
В хендлере я хотел бы получить как аргумент конкретный подтип сервиса App\Service\ExampleService. Проблема в том, что фабричный метод определяет подтип по параметру, который появляется в рантайме, до того как происходит инвок хендлера. Как в такой ситуации лучше поступить? Возможно ли сделать так, чтобы в хендлере я просто мог указать в аргументах ExampleService и получить его подтип в соответствии с тем параметром из рантайма?
Ну если этот параметр появляется до вызова хэндлера, попробуйте его где-то сохранить,а потом вытащить в фабрике через DI. Костыли, но например через теже атрибуты реквеста или parametBag.
instanceof нет?
фабрика у тебя возвращает объект, проверь на instanceof
Кейс другой: нужно вернуть нужный сервис из фабрики, сервис определяется в рантайме. Я бы просто фабрику подсунул, но задача без фабрики в хэндлере
"В хендлере я хотел бы получить как аргумент конкретный подтип сервиса"
Я например тоже не понял причем тут instacnce of )
и получить его подтип в соответствии с тем параметром из рантайма
Так смысл не в том, чтобы определить подтип в хэндлере, а чтобы нужный подтип из фабрики прилетел.
Типа фабрика конфет выпускает на том же конвейере пиво?
Типо есть разные шлюзы смс на одном интерфейсе например, и конкретный шлюз опредлеяется где то в рантайме до хэндлера
И все это заворачиваем на какой нибудь один единственный роут в post?
Не совсем понял мысль
POST /notify/sms --payload {phone: 79260000000, …} Если запрос такого рода и по каким-то причинам нужно юзать разные например смс шлюзы
Ну в моем примере да. Только юзаются не разные - а один, но выбирается он из нескольких где-то ранее. Можно было бы сделать это в самой фабрике, но у ТС другой контекст, и видимо в фабрике - не получается.
Ну ему можно например pipeline заюзать
Обсуждают сегодня