Ответ 1
Важно понять, что вы можете (и должны) написать свой код в дружественном для пользователя, но контейнеро-агностическом способе.
Это означает, что вы всегда должны подталкивать состав зависимостей к точке, где вы больше не можете ее откладывать. Это называется Root Composition и часто помещается рядом с точкой входа приложения.
Если вы создаете свое приложение таким образом, ваш выбор контейнера DI (или нет контейнера DI) вращается вокруг одного места в вашем приложении, и вы можете быстро изменить стратегию.
Вы можете использовать Бедный человек DI, если у вас есть только несколько зависимостей, или вы можете использовать полномасштабный Контейнер DI. Используемый таким образом, вы не будете зависеть от какого-либо конкретного контейнера DI, поэтому выбор становится менее важным с точки зрения ремонтопригодности.
Контейнер DI помогает вам управлять полнотой, включая время жизни объекта. Используемый, как описано здесь, он не делает ничего, что вы не могли бы написать в руке, но он делает это лучше и более лаконично. Таким образом, мой порог для того, чтобы начать использовать контейнер DI, будет довольно низким.
Я бы начал использовать контейнер DI после того, как пройду несколько зависимостей. Большинство из них довольно легко начать в любом случае.
Update: My ноябрь 2012 года ответит на этот вопрос.