新しいデスクトップアプリケーションを開始していますが、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;
}
}
これにより、モックなどを使用して、ユニットテストが適切に機能することを確認するユニットテストを簡単に作成できます。
問題は、実際のアプリケーションで使用することです。IStorage
インターフェイスのデフォルト実装をリンクするIoCコンテナが必要であることはわかっていますが、どうすればよいですか?
たとえば、次のxamlがあるとどうなりますか。
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:SomeViewModel />
</Window.DataContext>
</Window>
その場合、依存関係を挿入するようにWPFに正しく「伝える」にはどうすればよいですか?
また、SomeViewModel
C#コードからのインスタンスが必要だとしたら、どうすればよいですか?
私はこれで完全に迷っていると感じています。どのようにそれを処理する最良の方法であるかについての例やガイダンスをいただければ幸いです。
私はStructureMapに精通していますが、専門家ではありません。また、より良い/より簡単/すぐに使えるフレームワークがある場合は、私に知らせてください。