Rozpoczynam nową aplikację desktopową i chcę ją zbudować przy użyciu MVVM i WPF.
Zamierzam również skorzystać z TDD.
Problem polega na tym, że nie wiem, jak powinienem użyć kontenera IoC, aby wstrzyknąć moje zależności w moim kodzie produkcyjnym.
Załóżmy, że mam następującą klasę i interfejs:
public interface IStorage
{
bool SaveFile(string content);
}
public class Storage : IStorage
{
public bool SaveFile(string content){
// Saves the file using StreamWriter
}
}
A potem mam inną klasę, która ma IStorage
jako zależność, przypuśćmy również, że ta klasa jest ViewModel lub klasą biznesową ...
public class SomeViewModel
{
private IStorage _storage;
public SomeViewModel(IStorage storage){
_storage = storage;
}
}
Dzięki temu mogę łatwo pisać testy jednostkowe, aby upewnić się, że działają poprawnie, używając makiet itp.
Problem polega na tym, że chodzi o użycie go w prawdziwej aplikacji. Wiem, że muszę mieć kontener IoC, który łączy domyślną implementację IStorage
interfejsu, ale jak mam to zrobić?
Na przykład, jak by to było, gdybym miał następujący xaml:
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:SomeViewModel />
</Window.DataContext>
</Window>
Jak poprawnie „powiedzieć” WPF, aby w takim przypadku wstrzyknął zależności?
Załóżmy również, że potrzebuję wystąpienia SomeViewModel
z mojego kodu C #, jak mam to zrobić?
Czuję, że jestem w tym całkowicie zagubiony, byłbym wdzięczny za każdy przykład lub wskazówkę, jak najlepiej sobie z tym poradzić.
Znam StructureMap, ale nie jestem ekspertem. Ponadto, jeśli istnieje lepszy / łatwiejszy / gotowy do użycia framework, daj mi znać.