Я читав цю цілу нитку двічі, і думаю, що люди відповідають на те, що знають, а не на те, що запитують.
Оригінальне запитання JP виглядає так, що він створює об'єкти, надсилаючи розв’язувач, а потім купу класів, але ми припускаємо, що ці класи / об'єкти самі є сервісами, дозрілими для ін'єкцій. Що робити, якщо їх немає?
JP, якщо ви хочете використовувати DI і бажаєте слави змішування ін'єкцій з контекстними даними, жоден із цих шаблонів (або передбачуваних "анти-шаблонів") конкретно не вирішує цього питання. Це насправді зводиться до використання пакету, який підтримає вас у такому починанні.
Container.GetSevice<MyClass>(someObject1, someObject2)
... цей формат рідко підтримується. Я вважаю, що складність програмування такої підтримки, додана до жалюгідної продуктивності, яка буде пов'язана з реалізацією, робить її непривабливою для розробників відкритих джерел.
Але це слід зробити, тому що я повинен мати можливість створити і зареєструвати завод для MyClass'es, і цей завод повинен мати можливість приймати дані / введення, які не підштовхуються до того, щоб бути "послугою" просто заради передачі дані. Якщо "антидіаграма" стосується негативних наслідків, то примушення існування штучних типів обслуговування для передачі даних / моделей, безумовно, негативно (нарівні з вашим почуттям щодо загортання класів у контейнер. Застосовується той же інстинкт).
Є рамки, які можуть допомогти, навіть якщо вони виглядають трохи некрасиво. Наприклад, Ninject:
Створення екземпляра за допомогою Ninject з додатковими параметрами в конструкторі
Це для .NET, є популярним, і все ще ніде не є таким чистим, як це має бути, але я впевнений, що на будь-якій мові ви не хочете використовувати.