2010-12-02 28 views
30

J'ai téléchargé Prism v4 et j'ai exécuté le programme d'installation. Je suis entré dans le répertoire et couru les deux fichiers batch suivants:Prism v4: Unity ou MEF?

  • bureau uniquement - Ouvert Modularité Avec Mef QuickStart.bat
  • bureau uniquement - Ouvert Modularité avec l'unité QuickStart.bat

Quand je compiler ces applications, je ne vois aucune différence réelle. J'ai cherché MEF vs Unity et j'ai trouvé quelques avantages/inconvénients, mais rien qui spécifie spécifiquement si l'on est "meilleur" (et je sais que c'est subjectif) avec l'utilisation de Prism. Je suppose que peut-être si je liste mes besoins quelqu'un peut me diriger vers les technologies correctes à utiliser (même si ce n'est pas Prism 4).

  • L'application doit être écrit en WPF (PAS Silverlight).
  • L'application principale sera extrêmement mince.
  • L'application principale utilisera un service Web pour créer le menu des «applications/modules» auxquels une personne a accès.
  • Les "apps/modules" seront complètement contenus dans d'autres bibliothèques gérées.
  • L'application principale obtient des vues et des viewmodels en reflétant dans ces DLL.
  • L'application principale doit fournir des services pour la journalisation, etc. dans ces "applications/modules".

Par exemple:

peut-être un utilisateur de base les options suivantes:

  • ViewOnly Adresse enregistrement

Tous les articles connexes Adresse sont à Address.dll.

Un utilisateur avancé peut avoir les options suivantes:

  • Nouveau record d'adresse
  • Ouvrir enregistrement d'adresse (mise à jour/supprimer)
  • Manage utilisateurs

Tous les objets Adresse connexes sont dans Address.dll.
Tous les éléments liés à Manage sont dans Admin.dll. L'application ne doit référencer aucune de ces DLL, je prévois d'y réfléchir pour que s'il y a 100 modules différents et qu'un utilisateur n'ait accès qu'à 2 d'entre eux, seulement 2 d'entre eux sont téléchargés et utilisés. Alors qu'un utilisateur qui a accès à 10 d'entre eux obtient ces 10.

J'ai déjà résolu la DLL de téléchargement via WebService. :)

+0

L'utilisation de 2.1 de Prism avec Unity et WPF ... été heureux jusqu'ici, n'ont pas utilisé personnellement MEF si ... –

+0

Qu'avez-vous fini par aller avec? Je suis en train de regarder un projet similaire, donc votre contribution serait géniale. – John

+0

@John: Pure MEF. –

Répondre

21

Aucun n'est "meilleur": ce sont des choses différentes.

IMO votre choix devrait être déterminé uniquement par vos besoins. Basé sur les exigences que vous avez posté ici, je vous suggère d'utiliser MEF, parce que vous avez des modules contenus dans les DLL et l'application principale ne connaît pas les modules à charger. Ces tâches sont la raison pour laquelle MEF existe.

Quoi qu'il en soit, vous pouvez les utiliser à la fois: MEF modularité et l'unité à profiter des avantages de l'injection de dépendance (testabilité, réutilisabilité, ...)

+0

Est-ce qu'ils se placent bien les uns avec les autres ou vont avoir de très mauvaises douleurs de croissance pour les amener à travailler ensemble (MEF/Unity). –

+10

Je travaille avec eux ensemble. Ils sont totalement indépendants. La seule douleur est quand vous concevez quelque chose de nouveau et vous devez indiquer si c'est une dépendance injectable ou un composant externe. Mais la plupart du temps est facile. – onof

+6

Expliquer mon +1 sur votre commentaire: J'aime la phraséologie ** dépendance dépendante ** vs ** composante externe ** pour aider à distinguer ce qui serait servi par l'unité ou le moif. – odalet

4

Si tous les modules ne sont pas recompilés en même temps que l'application, alors MEF vous donne beaucoup de façons de faire face aux changements d'interfaces dans l'application principale. Autrement MEF peut être plus complexe alors vous avez besoin de.

2

J'utilise Unity depuis un an avec PRISM mais j'ai remarqué de sérieux problèmes de fuite de mémoire. J'ai donc décidé d'essayer PRISM 4 et MEF. Ce que j'ai fait, c'est d'abord convertir mon application pour utiliser PRISM 4 avec Unity. Ensuite, j'ai converti une branche pour utiliser MEF. Cela peut sembler drôle, mais MEF semble gérer la consommation de mémoire et la sortie en quelque sorte mieux que Unity.

Serait-il agréable d'entendre si d'autres ont fait la même expérience?

+0

semble intéressant – Shimmy

+9

Je ne peux pas comprendre pourquoi cette réponse a 3 +, sans commentaires. Soit cela est arrivé à d'autres personnes (c'est pourquoi ils doivent +1 ET commenter), ou la fuite de mémoire est complètement indépendante de l'unité. Je n'ai jamais rencontré quelque chose comme ça. –

2

En ce qui concerne votre question de savoir si MEF et UNITY peuvent bien fonctionner les uns avec les autres, je peux vous dire qu'ils fonctionnent très bien les uns avec les autres. J'ai développé une application de preuve de concept qui utilisait PRISM, Unity et MEF.

+5

Pourriez-vous partager cette application avec nous? – John