Я голосую за Visual Studio, но кажется, что C++ рассматривают как второй гражданин класса (не компилятор и материал, но поддержка IDE) по сравнению с языками.NET как C#, но надо надеяться MS будет делать с этим что-то следующей версией Visual Studio (новый стандарт появляется, и они обещали, что 10 должен быть новый 6).
Вот краткий список наиболее важных моментов (некоторые из которых также появляются в OP):
Я не могу сказать, что согласен с вашей точкой зрения относительно объектов Singleton и Transient. Весь смысл DI в том, что внешний механизм (например, контейнер DI) определяет время жизни любой данной зависимости, а не кого-то еще, поэтому вам необходимо, чтобы все зависимости управлялись контейнером DI.
Используйте контейнер DI только для долгоживущих объектов Singleton, используйте фабрики (или другие методы) для короткоживущих переходных объектов)
Но действительно используйте DI для внедрения фабрик туда, где есть необходимо.