Comment gérer l'injection de dépendance dans un WPF/MVVM application

Je suis en train de créer une nouvelle application de bureau et je tiens à le construire en utilisant MVVM et WPF.

J'ai également l'intention d'utiliser TDD.

Le problème est que je ne sais pas comment je dois utiliser un conteneur IoC à injecter mon dépendances sur mon code de production.

Supposons que j'ai la suivantes de la classe et de l'interface:

public interface IStorage
{
    bool SaveFile(string content);
}

public class Storage : IStorage
{
    public bool SaveFile(string content){
        //Saves the file using StreamWriter
    }
}

Et puis j'ai une autre classe qui a IStorage comme une dépendance, supposons aussi que cette classe est un ViewModel ou d'une classe affaires...

public class SomeViewModel
{
    private IStorage _storage;

    public SomeViewModel(IStorage storage){
        _storage = storage;
    }
}

Avec ce que je peux facilement écrire des tests unitaires pour s'assurer qu'ils fonctionnent correctement, en utilisant les objets fantaisie et etc.

Le problème est lorsqu'il s'agit de l'utiliser dans l'application réelle. Je sais que je dois avoir un conteneur IoC, qui lie une implémentation par défaut pour le IStorage interface, mais comment puis-je faire?

Par exemple, comment en serait-il si j'ai eu le code xaml suivant:

<Window 
    ... xmlns definitions ...
>
   <Window.DataContext>
        <local:SomeViewModel />
   </Window.DataContext>
</Window>

Comment puis-je correctement "raconter" WPF pour injecter des dépendances dans ce cas?

Aussi, supposons que j'ai besoin d'une instance de SomeViewModel de mon cs code, comment dois je faire?

Je me sens Im complètement perdu dans cette, je vous serais reconnaissant de tout exemple ou des conseils de comment est la meilleure façon de le gérer.

Je suis familier avec StructureMap, mais je ne suis pas un expert. Aussi, si il y a un mieux/plus facile/dehors-de-le-boîte-cadre, s'il vous plaît laissez-moi savoir.

Merci d'avance.

  • Avec .net core 3.0 dans l'aperçu, vous pouvez le faire avec Microsoft certains packages nuget.
InformationsquelleAutor Fedaykin | 2014-08-18