12
votes

Comment puis-je combiner MVVM et injection de dépendance dans une application WPF?

Pouvez-vous donner un exemple de la manière dont vous utiliseriez (votre favori) DI Framework sur Wire MVVM Voir les modèles pour une application WPF?

Souhaitez-vous créer une hiérarchie de modèles de la hiérarchie fortement connectée (comme lorsque tous les points de vue de la Contrôle imbriquées sont une propriété sur la vue d'un parent et vous le liez à DataContext de Control in Ouolé dans XAML) ou vous utiliseriez une sorte de même davantage. Résumé "" Voir modèle "Manager", qui maintient une hiérarchie faiblement connectée ... comme dans la cabine, peut-être?


0 commentaires

3 Réponses :


6
votes

Si un modèle de vue ne peut exister que conjointement avec un autre, je crée une relation forte. C'est le modèle de vue de propriété aura une référence directe à un ou plusieurs des modèles de la vue dépendante. Si, d'autre part, un modèle de vue devrait être capable d'exister avec ou sans autre, je prends une approche à couplage de manière lâche où ils communiquent via un bus d'événement.

En termes d'utilisation de di avec MVVM, vous pouvez absolument combiner les deux. C'est aussi simple que: xxx

note, cependant, que cela suppose une approche "View Modèle d'abord" en MVVM, qui a ses inconvénients.


7 commentaires

Je dois dire que je ne suis pas un grand fan de «actif» des images de vie ... il est difficile de proposer un argument rationnel d'une phrase pour cela, mais je pense que je suis dans le camp des «voyages de vie devrait être passif». ..


Qu'entendez-vous par modèle de vue «actif» / «passif», marquez-vous?


@YaCoder: L'exemple de Kent Boogaart est une vue "active", car il faut une dépendance, et il faut supposer que son intention d'utiliser cette dépendance de manière active. Une vue "passive", d'autre part, est une fois que vous créez et remplissez de données, et une fois que vous avez fait cela, il est autonome.


Ceci est également connu sous le nom de modèle de vision - premier versus View - Premier. Je préfère la vm-d'abord mais comprenez qu'il ne joue pas bien avec le mélange. À chacun le sien, je suppose.


Je pense que je comprends bien la vie d'abord vs visionnelle - d'abord, mais j'ai bien peur de ne pas comprendre cette réponse ou les commentaires très bien - comment les dépendances de la viewModel, dans le constructeur ou ailleurs, impliquent une première approche de la vue? La dépendance dans l'exemple de la réponse pourrait être remplie par un conteneur. @Mark, je ne comprends pas ce que vous voulez dire - impliquez-vous une viewModel ne devrait pas avoir de dépendances? Comment voulez-vous "le remplir de données" si c'est déconnecté / isolé et n'a pas de dépendances? Merci!


Pour être honnête, j'ai changé mon point de vue un peu au cours des 8 derniers mois. Je préférerais des images passives, mais dans MVVM, cela fonctionne mieux avec des mentuels actives. Dans ASP.NET MVC, OTOH, ViewModels passives sont beaucoup plus faciles à faire face, car nous pouvons utiliser des contrôleurs pour les remplir. Différents contextes nécessitent différentes solutions ...


@Kentboogaart désolé d'essayer d'attirer votre attention de cette façon; Pouvez-vous regarder Cette question



3
votes

Dans WPF, il est normalement assez facile et cela ne dépend pas vraiment d'un conteneur DI particulier. Avez-vous lu Article de Josh Smith sur MVVM ? Il décrit à peu près comment mettre en place une hiérarchie des images de vue.

Qu'est-ce qui ne va pas dans la mesure où créer ces images de dépendances (telles que des référentiels), mais ce n'est pas une extrapolation difficile à faire.

J'ai souvent vécu que l'utilisation libérale des usines abstraites contribue beaucoup à cet égard. Au lieu de nouvelles découvertes, je laisse une usine injectée le faire pour moi.

Vous pouvez utiliser le mauvais homme de l'homme ou tout type de conteneur DI pour filer de telles usines pour vous.


2 commentaires

Je n'ai certainement lu l'article, mais cela ne va pas dans les détails sur la création et la maintenance d'un ensemble plus vaste de formes de vie avec plusieurs dépendances dans chacune d'elles. J'ai bien peur que votre réponse ne soit pas utile pour moi (


@Yacoder: Vous seriez surpris de savoir combien de personnes utilisent le terme MVVM ici sur Stackoverflow sans avoir lu l'article.



1
votes

J'ai publié Cet article sur le projet de code sur la façon de faire une extensibilité Application WPF utilisant MVVM et MEF pour l'extensibilité. Cependant, si vous regardez de près, j'ai utilisé MEF pour DI aussi.

L'application est entièrement MVVM et utilise uniquement des datatempates (et la fenêtre occasionnelle) pour les vues, tout comme dans l'article de Josh Smith. WPF s'occupe de l'application de la vue correcte sur la vue de droite pour vous. C'est doux.

Il utilise Mef afin que les pièces puissent "se trouver" mutuellement. Donc, le point de vue de l'élément de menu "Affichage" trouve tous les éléments de menu supposés être dans le sous-menu à l'aide de points d'extension et les images de vue pour chacune de ces "Rechercher" la viewModel, elles sont censées remédoi à la mise en page. points de composition. Ils "trouvent" le service de gestion de layout utilisant un localisateur de services rudimentaires (MEF). L'exemple de menu Affichage est presque précisément ce dont vous parlez avec des menuels imbriqués. La chose cool est qu'elles ne connaissent même pas les unes des autres jusqu'à l'exécution.


0 commentaires