Я запускаю новое настольное приложение, и я хочу его создать с помощью MVVM и WPF.
Я также намереваюсь использовать TDD.
Проблема в том, что я не знаю, как я должен использовать контейнер IoC для ввода моих зависимостей в свой производственный код.
Предположим, что у меня есть следующий класс и интерфейс:
public interface IStorage
{
bool SaveFile(string content);
}
public class Storage : IStorage
{
public bool SaveFile(string content){
// Saves the file using StreamWriter
}
}
И тогда у меня есть еще один класс с IStorage
как зависимость, предположим также, что этот класс является ViewModel или бизнес-классом...
public class SomeViewModel
{
private IStorage _storage;
public SomeViewModel(IStorage storage){
_storage = storage;
}
}
С этим я могу легко написать модульные тесты, чтобы убедиться, что они работают правильно, используя mocks и т.д.
Проблема в том, когда дело доходит до использования в реальном приложении. Я знаю, что у меня должен быть контейнер IoC, который связывает реализацию по умолчанию для интерфейса IStorage
, но как я могу это сделать?
Например, как бы это было, если бы у меня был следующий xaml:
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:SomeViewModel />
</Window.DataContext>
</Window>
Как я могу правильно "указать" WPF для встраивания зависимостей в этом случае?
Кроме того, предположим, что мне нужен экземпляр SomeViewModel
из моего кода cs
, как это сделать?
Я чувствую, что полностью потерял в этом, я был бы признателен за любой пример или руководство, как наилучшим образом справиться с этим.
Я знаком с StructureMap, но я не эксперт. Кроме того, если есть лучшая/упрощенная/готовая структура, сообщите мне.
Спасибо заранее.