Sto avviando una nuova applicazione desktop e voglio crearla utilizzando MVVM e WPF.
Ho anche intenzione di utilizzare TDD.
Il problema è che non so come dovrei usare un container IoC per iniettare le mie dipendenze dal mio codice di produzione.
Supponiamo di avere la seguente classe e interfaccia:
public interface IStorage
{
bool SaveFile(string content);
}
public class Storage : IStorage
{
public bool SaveFile(string content){
// Saves the file using StreamWriter
}
}
E poi ho un'altra classe che ha IStorage
come dipendenza, supponiamo anche che questa classe sia un ViewModel o una business class ...
public class SomeViewModel
{
private IStorage _storage;
public SomeViewModel(IStorage storage){
_storage = storage;
}
}
Con questo posso scrivere facilmente unit test per assicurarmi che funzionino correttamente, usando mock ed ecc.
Il problema è quando si tratta di usarlo nell'applicazione reale. So che devo avere un contenitore IoC che collega un'implementazione predefinita per l' IStorage
interfaccia, ma come lo farei?
Ad esempio, come sarebbe se avessi il seguente xaml:
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:SomeViewModel />
</Window.DataContext>
</Window>
Come posso "dire" correttamente a WPF di iniettare le dipendenze in quel caso?
Inoltre, supponiamo di aver bisogno di un'istanza di SomeViewModel
dal mio codice C #, come dovrei farlo?
Sento di essermi completamente perso in questo, apprezzerei qualsiasi esempio o guida su come sia il modo migliore per gestirlo.
Conosco StructureMap, ma non sono un esperto. Inoltre, se esiste un framework migliore / più facile / pronto all'uso, fammelo sapere.