В настоящее время я пытаюсь лучше понять инъекцию зависимостей, и я использую asp.net MVC для работы с ней. Вы можете увидеть некоторые другие связанные вопросы от меня;)
Хорошо, я начну с примерного контроллера (примера приложения MVC приложения asp.net для диспетчера контактов)
public class ContactsController{
ContactsManagerDb _db;
public ContactsController(){
_db = ContactsManagerDb();
}
//...Actions here
}
Хорошо, здорово, что работает. Мои действия могут использовать базу данных для действий CRUD. Теперь я решил, что хочу добавить модульное тестирование, и я добавил еще один конструктор, чтобы издеваться над базой данных
public class ContactsController{
IContactsManagerDb _db;
public ContactsController(){
_db = ContactsManagerDb();
}
public ContactsController(IContactsManagerDb db){
_db = db;
}
//...Actions here
}
Удивительно, что в моих модульных тестах я могу создать свою собственную реализацию контроллера IContactsManagerDb
и unit test.
Теперь люди обычно принимают следующее решение (и вот мой фактический вопрос), избавьтесь от пустого контроллера и используйте инъекцию зависимостей, чтобы определить, какую реализацию использовать.
Итак, используя StructureMap, я добавил следующее правило инъекции:
x.For<IContactsManagerDb>().Use<ContactsManagerDb>();
И, конечно же, в моем тестовом проекте я использую другую реализацию IContactsManagerDb
.
x.For<IContactsManagerDb>().Use<MyTestingContactsManagerDb>();
Но мой вопрос: ** Какую проблему я решил или что упростил, используя инъекцию зависимостей в этом конкретном случае?
Я не вижу никакого практического использования этого сейчас, я понимаю, КАК, но НЕ ПОЧЕМУ? Какая польза от этого? Может ли кто-нибудь добавить к этому проекту, возможно, привести пример, как это более практично и полезно?