Estoy iniciando una nueva aplicación de escritorio y quiero construirla usando MVVM y WPF.
También tengo la intención de utilizar TDD.
El problema es que no sé cómo debo usar un contenedor IoC para inyectar mis dependencias en mi código de producción.
Supongamos que tengo la siguiente clase e interfaz:
public interface IStorage
{
bool SaveFile(string content);
}
public class Storage : IStorage
{
public bool SaveFile(string content){
// Saves the file using StreamWriter
}
}
Y luego tengo otra clase que tiene IStorage
como dependencia, supongamos también que esta clase es un ViewModel o una clase empresarial ...
public class SomeViewModel
{
private IStorage _storage;
public SomeViewModel(IStorage storage){
_storage = storage;
}
}
Con esto puedo escribir fácilmente pruebas unitarias para asegurarme de que funcionan correctamente, usando simulacros, etc.
El problema es a la hora de utilizarlo en la aplicación real. Sé que debo tener un contenedor de IoC que vincule una implementación predeterminada para la IStorage
interfaz, pero ¿cómo lo haría?
Por ejemplo, ¿cómo sería si tuviera el siguiente xaml:
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:SomeViewModel />
</Window.DataContext>
</Window>
¿Cómo puedo 'decirle' correctamente a WPF que inyecte dependencias en ese caso?
Además, supongamos que necesito una instancia de SomeViewModel
mi código C #, ¿cómo debo hacerlo?
Siento que estoy completamente perdido en esto, agradecería cualquier ejemplo u orientación de cómo es la mejor manera de manejarlo.
Estoy familiarizado con StructureMap, pero no soy un experto. Además, si hay un marco mejor / más fácil / listo para usar, hágamelo saber.