Где правильно выполнить динамическую проверку, например, для выбора метода оплаты, используя laravel контракт и инъекцию зависимостей?
Делать в реальном проекте так точно не рекомендуется.
То что вы приводите в виде примера - это размазывание бизнес логики между всеми слоями приложения.
Все что вам нужно, это какой-то класс PaymentFactory, который будет иметь метод make(string $credit), у которого аргумент $credit и будет принимать значения credit/bank/null и на основании переданного аргумента будет возвращать правильный объект класса обработчика конкретного метода оплаты. И уже этот PaymentFactory можете вызывать через DI.
Однако эту задачу можно решить через паттерн стратегия, тоже хорошо подойдет для удобной организации кода.
Лучше всего делать это так, чтобы быстро найти хвосты когда будешь дорабатывать это дело через пол года. Ну и придерживаться этого подхода по всему проекту. В общем случае явное лучше неявного (что предполагает принятие решения в контроллере и явное создание объекта с нужным интерфейсом (ну или байндинг класса) в месте обработки запроса