Ответ 1
Основные понятия:
Предположим, вы хотите протестировать свое приложение, которое имеет дело с услугой кредитной карты. Для целей тестирования вы не должны получать доступ к реальному RPCCreditCardService, поскольку ему понадобятся реальные транзакции и другие продукты, которые вы не хотите выполнять во время разработки. В этом случае вам нужно было создать клон-фальшивую услугу, которая будет имитировать то же самое, что и реальная услуга CreditCardService, но ничего не совершать. Если вы используете инфраструктуру инъекций зависимостей, вы можете определить общие задачи в зависимости и ввести ее как в поддельный, так и в реальный сервис. Это позволит свести к минимуму сложность кодирования, а также поможет сделать каждый модуль независимым.
Из документации:
Используя среду внедрения инъекций, каждый класс легко тестировать. Вам не нужна куча шаблонов, чтобы обменять RpcCreditCardService на FakeCreditCardService.
Включение зависимостей не только для тестирования. Это также упрощает создание многоразовых, взаимозаменяемых модулей. Вы можете использовать один и тот же AuthenticationModule во всех своих приложениях. И вы можете запустить DevLoggingModule во время разработки и ProdLoggingModule в процессе производства, чтобы получить правильное поведение в каждой ситуации.
Справка:
Для более подробного понимания вы можете проверить эту дискуссию.