Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Для чего необходимо внедрение зависимости (dependency injection)?

Вот пример кода из всеми любимого тутора Nerddinner public class DinnersController : Controller {
IDinnerRepository dinnerRepository;
// // Dependency Injection enabled constructors
public DinnersController() : this(new DinnerRepository()) { }
public DinnersController(IDinnerRepository repository) { dinnerRepository = repository; }
... Какая разница, если я буду создавать объект репозитория в методах контроллера? public ActionResult Edit(int id) {
DinnerReposotiry dinnerRepository = new DinnerRepository(); Dinner dinner = dinnerRepository.GetDinner(id);
if (!dinner.IsHostedBy(User.Identity.Name)) return View("InvalidOwner");
return View(dinner); }


Ответ

Использование DependencyInjection даёт три преимущества. Возможность подменить некий сервис, не являющийся технологически нейтральным. Возможность автоматически тестировать различные модули программы независимо. В Вашем примере Dependency Injection позволяет написать автоматический тест, проверяющий, что DinnersController правильно вызывает методы DinnerRepository. Возможность повторно использовать код DinnersController с другими реализациями IDinnerRepository.

Комментариев нет:

Отправить комментарий