Я запускаю новое настольное приложение и хочу создать его с помощью 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;
}
}
Благодаря этому я могу легко писать модульные тесты, чтобы убедиться, что они работают должным образом, используя макеты и т. Д.
Проблема в том, когда дело доходит до использования его в реальном приложении. Я знаю, что у меня должен быть контейнер IoC, который связывает реализацию IStorage
интерфейса по умолчанию , но как мне это сделать?
Например, как бы было, если бы у меня был следующий xaml:
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:SomeViewModel />
</Window.DataContext>
</Window>
Как я могу правильно «сказать» WPF внедрять зависимости в этом случае?
Кроме того, предположим, что мне нужен экземпляр SomeViewModel
из моего кода C #, как мне это сделать?
Я чувствую, что полностью потерялся в этом, я был бы признателен за любой пример или руководство о том, как лучше всего с этим справиться.
Я знаком со StructureMap, но не эксперт. Кроме того, дайте мне знать, если есть более эффективный / простой / нестандартный фреймворк.