2017-05-18 1 views
0

J'ai une application modulaire relativement complexe qui semble être un bon ajustement pour la bibliothèque Prism et l'architecture Shell/Module.Prism instancemodel instance unique, utilisé par plusieurs vues

Je suis accroché sur la possibilité de ce qui suit:

Mon application se connecte à de nombreux périphériques physiques, pour cet exemple, je veux me connecter à un laser sur RS232. Je n'aurai besoin que d'une poignée de méthodes pour le laser, comme Connect, GetHeight, SendCommand et Disconnect. Donc, tout cela devrait être défini dans une classe de laser.

Maintenant, j'ai besoin d'un LaserModule aura plusieurs vues qui sont réparties dans mon application. Une vue peut constamment interroger le laser à l'aide de GetHeight et afficher la valeur, une autre vue peut être un bouton simple qui fait un seul GetHeight et affiche le résultat dans une boîte de dialogue. Une autre vue peut simplement être un autre bouton qui est ajouté à une région listview (parmi d'autres vues de module) qui, lorsque cliqué, va à la vue des paramètres pour le LaserModule. Cela dit, il ne peut y avoir qu'une seule instance de la classe laser par LaserModule car je ne peux être connecté qu'une seule fois au port RS232. En outre, j'imagine que toutes les vues partageraient le même ViewModel (instance unique) car une grande partie de la fonctionnalité est partagée entre les différentes vues.

Est-ce que cela a un sens? J'aurai de nombreuses régions, mais au fur et à mesure que j'échange des vues dans ces régions, je ne veux jamais créer plus d'une instance de chaque modèle View/View. Enfin, l'application devrait être capable de gérer plusieurs LaserModules pour chaque laser physiquement connecté (mais chacun aurait son propre ensemble distinct de Views/ViewModels à instance unique).

Toute idée est très apprécié, cette image résume à peu près ce que je suis en train de faire: Laser Views

Répondre

0

Vous aurez un service laser et qui serait enregistré avec le récipient comme un singleton. Ensuite, votre ViewModel utilisera le service. N'essayez pas d'avoir ViewModels singleton. C'est demander des ennuis.

+0

Merci Brian, où pourrait-il être logique de faire cet enregistrement de la classe laser, juste à l'intérieur de l'initialisation de mon LaserModule? Si j'ai besoin de 2/3/4 + lasers dans mon application, serait-il préférable de simplement faire l'enregistrement des classes laser dans une boucle foreach lors de l'initialisation? Ou est-ce logique d'ajouter un LaserModule 2nd/3rd/4th/+, et chacun d'entre eux a son propre laser singleton? Ou cette décision est-elle complètement triviale parce que les deux sont possibles? – z0nghits