Estou iniciando um novo aplicativo de desktop e quero criá-lo usando MVVM e WPF.
Também pretendo usar TDD.
O problema é que não sei como devo usar um contêiner IoC para injetar minhas dependências no meu código de produção.
Suponha que eu tenha a seguinte classe e interface:
public interface IStorage
{
bool SaveFile(string content);
}
public class Storage : IStorage
{
public bool SaveFile(string content){
// Saves the file using StreamWriter
}
}
E então eu tenho outra classe que tem IStorage
como dependência, suponha também que essa classe seja um ViewModel ou uma classe de negócios ...
public class SomeViewModel
{
private IStorage _storage;
public SomeViewModel(IStorage storage){
_storage = storage;
}
}
Com isso, posso escrever facilmente testes de unidade para garantir que estão funcionando corretamente, usando simulações e etc.
O problema é quando se trata de usá-lo no aplicativo real. Eu sei que devo ter um contêiner IoC que vincula uma implementação padrão para a IStorage
interface, mas como eu faria isso?
Por exemplo, como seria se eu tivesse o seguinte xaml:
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:SomeViewModel />
</Window.DataContext>
</Window>
Como posso 'dizer' corretamente ao WPF para injetar dependências nesse caso?
Além disso, suponha que eu precise de uma instância de SomeViewModel
do meu código C #, como devo fazer isso?
Sinto que estou completamente perdido nisso, agradeceria qualquer exemplo ou orientação de como é a melhor maneira de lidar com isso.
Estou familiarizado com o StructureMap, mas não sou um especialista. Além disso, se houver uma estrutura melhor / mais fácil / out-of-the-box, por favor me avise.