Речь идет об этом (вставить зависимость)
private readonly ICustomerService _customerService;
public Billing(ICustomerService customerService)
{
_customerService = customerService;
}
против этого (Создать зависимость)
private readonly ICustomerService _customerService;
public Billing()
{
_customerService = new CustomerService();
}
последний пример, поэтому они говорят, что это плохо, потому что ... он нарушает DI ... конечно, ничего не вводится ... но что, если DI не существует, что такого плохого, что CustomerService создается вручную из класса Billing?Я не вижу практического преимущества в отношении взаимозаменяемости интерфейса Сервиса.
Я прошу привести практический пример с исходным кодом, может ли это быть модульный тест или демонстрация практического решения, почему это намного более слабая связь.
Кто-нибудь достаточно заинтересован, чтобы показать свои мышцы DI и почему он имеет практическое право на существование и применение?
ОБНОВЛЕНИЕ
Так что люди не имеютчтобы прочитать все, я напишу здесь мой короткий опыт:
DI как шаблон имеет практическое применение.Чтобы следовать DI, не вводя все службы вручную (плохой инструмент DI, как говорят ...), используйте инфраструктуру DI, такую как LightCore / Unity, но убедитесь, что вы используете правильный инструмент для соответствующей работы.Это то, чего я не делал ;-) При разработке приложения mvvm / wpf у меня есть другие требования, которые инструмент LightCore / Unity не мог поддерживать, они даже были барьером.Моим решением было использовать MEFEDMVVM, чем я доволен.Теперь мои сервисы автоматически добавляются во время выполнения, а не во время запуска. :-)