Ja mam doświadczenie w c# - co prawda nie z ninjectem, ani autofac tylko z DI dostępnym by default w ASP .NET Core, oraz javą i springiem.
W C# założenia zespołu były takie:
- minimalizacja "new" - chyba że to jakieś DTO
- wstrzykiwanie tylko przez konstruktor
- ASP.NET Core był na sterydach = większość opierała się o singletony, choć zazwyczaj używa się transientów(nowa instancja za każdym razem kiedy prosisz kontener)
Ogólnie nie działaliśmy zgodnie z założeniami Microsoftu, były problemy z Entity Framework itd. Choć nic czego nie dałoby się ogarnąć jakoś sensownie.
Aha no i ten kontener miał bardzo mało magii - nie było jakichś proxy itd - jeśli do singletonu wstrzyknięto transient, albo obiekt requestScope, to on tam po prostu zostawał. Co było upierdliwe, ale fajne. Ogólnie DI mi nie przeszkadzało i wszystko było w miarę łatwe, choć czasami ciężko było przewidzieć mi działanie kodu.
Natomiast w Springowych projektach było różnie:
- Wstrzykiwanie przez konstruktor, ale i bardzo często do prywatnych pól.
- Do singletonu można wstrzyknąć obiekt o requestScope i to działa - są proxy które to ogarniają automagicznie
W springu nie widzisz co skąd i dlaczego, "ify" na zależnościach to wiedza tajemna zespołu - a przynajmniej ja tak to widzę. W przeciwieństwie do ASP .NET Core gdzie definiuje się te zależności kodem
services.AddTransient<IOperationTransient, Operation>();
services.AddScoped<IOperationScoped, Operation>();
services.AddSingleton<IOperationSingleton, Operation>();
co jest dość przejrzyste i łatwo tym sterować w przeciwieństwie do springa, jego conditionali itd. Dotatkowo w springu używa się mnóstwa adnotacji(atrybutów) co zaśmieca kod i czyni go wg. mnie okropnym.
Co do pytania - to uważam że jeśli używasz kontenera to powinieneś go używać i minimalizować new. W każdym razie zastanowiłbym się czy faktycznie tego potrzebujesz.
A jeśli chodzi o Scale - to z tego co wiem że ludzie różnie sobie radzili i chyba wyszło im faktycznie na to że DI(takie frameworkowe) jest bez sensu. Chociaż słyszałem o jakichś lewych patternach, ale uznanych za antypatterny więc niegodne naśladowania.
EDIT: Pomimo tego uważam że Java jest fajna. a C# jest od Microsoftu i jest fajny, ale Microsoft nie jest fajny :P