Я прочитал всю эту ветку дважды, и я думаю, что люди отвечают тем, что они знают, а не тем, что спрашивают.
Исходный вопрос JP выглядит так, как будто он строит объекты, отправляя распознаватель, а затем группу классов, но мы предполагаем, что эти классы / объекты сами по себе являются сервисами, готовыми для внедрения. Что, если они не?
JP, если вы хотите использовать DI и хотите , чтобы у вас была возможность смешивать инъекции с контекстными данными, ни один из этих паттернов (или предполагаемых «анти-паттернов») специально не решает эту проблему. Это на самом деле сводится к использованию пакета, который будет поддерживать вас в таких усилиях.
Container.GetSevice<MyClass>(someObject1, someObject2)
... этот формат редко поддерживается. Я считаю, что сложность программирования такой поддержки, добавляемая к жалкой производительности, которая может быть связана с реализацией, делает ее непривлекательной для разработчиков с открытым исходным кодом.
Но это должно быть сделано, потому что я должен иметь возможность создавать и регистрировать фабрику для MyClass'а, и эта фабрика должна иметь возможность получать данные / ввод, которые не превращаются в «службу» только для передачи данные. Если «анти-паттерн» связан с негативными последствиями, то форсирование существования искусственных типов сервисов для передачи данных / моделей, безусловно, является негативным (наравне с вашим чувством оборачивания ваших классов в контейнер. Применяется тот же инстинкт).
Однако существуют рамки, которые могут помочь, даже если они выглядят немного некрасиво. Например, Ninject:
Создание экземпляра с использованием Ninject с дополнительными параметрами в конструкторе
Это для .NET, популярно и еще нигде не так чисто, как должно быть, но я уверен, что есть что-то на любом языке, который вы выберете.