Тоже всегда использую вариант 1, он гарантирует что у если у вас есть инстанс класса, вы можете его полноценно использовать. Если же использовать мягкие зависимости то возможны ситуации когда объект есть, а зависимости не инициализированы, и ваш класс в некотором смысле становиться либо "зависимым" от фабрики, либо усложняется его использование необходимостью проверки наличия нужных зависимостей. Ведь у зависимостей класса тоже могут быть свои зависимости, у которых может отсутствовать что-то. И чем больше зависимостей, тем сложнее этим управлять.
Так-же большое кол-во аргументов в конструктор является неплохим призывом порефакторить.
Проблемы с памятью решаются сильно дешевле, чем время программистов на поиски ошибок.