Przeczytałem cały ten wątek dwa razy i myślę, że ludzie odpowiadają tym, co wiedzą, a nie pytaniem.
Oryginalne pytanie JP wygląda na to, że konstruuje obiekty, wysyłając resolver, a następnie kilka klas, ale zakładamy, że te klasy / obiekty same są usługami, gotowe do wstrzyknięcia. Co jeśli nie są?
JP, jeśli chcesz wykorzystać DI i pragnąć chwały mieszania zastrzyku z danymi kontekstowymi, żaden z tych wzorów (lub rzekomych „anty-wzorów”) nie rozwiązuje tego specjalnie. W rzeczywistości sprowadza się to do użycia pakietu, który wesprze Cię w takim przedsięwzięciu.
Container.GetSevice<MyClass>(someObject1, someObject2)
... ten format jest rzadko obsługiwany. Wierzę, że trudność programowania takiego wsparcia, dodana do nędznej wydajności, która byłaby związana z implementacją, czyni go nieatrakcyjnym dla programistów open source.
Ale należy to zrobić, ponieważ powinienem być w stanie stworzyć i zarejestrować fabrykę dla MyClass, a ta fabryka powinna być w stanie odbierać dane / dane wejściowe, które nie są popychane jako „usługa” tylko ze względu na przekazywanie dane. Jeśli „anty-wzorzec” ma negatywne konsekwencje, wówczas wymuszenie istnienia sztucznych typów usług do przekazywania danych / modeli jest z pewnością negatywne (na równi z przeczuciem, że pakujesz swoje klasy w kontener. Obowiązuje ten sam instynkt).
Istnieją ramy, które mogą pomóc, nawet jeśli wyglądają nieco brzydko. Na przykład Ninject:
Tworzenie instancji za pomocą Ninject z dodatkowymi parametrami w konstruktorze
Dotyczy to .NET, jest popularny i wciąż nie jest tak czysty, jak powinien, ale jestem pewien, że jest coś w jakimkolwiek języku, który wybierzesz.