2010-12-02 23 views
30

Ich habe Prism v4 heruntergeladen und das Installationsprogramm ausgeführt. Ich ging in das Verzeichnis und lief die beiden folgenden Batch-Dateien:Prism v4: Einheit oder MEF?

  • Nur Desktop - Offene Modularität Mit Mef QuickStart.bat
  • Nur Desktop - Offene Modularität Mit Unity QuickStart.bat

Als ich kompilieren Sie diese Anwendungen, sehe ich keinen wirklichen Unterschied. Ich habe nach MEF vs Unity gesucht und ich habe einige Vor-/Nachteile gefunden, aber nichts, was spezifisch sagt, ob man "besser" ist (und ich weiß, dass es subjektiv ist), wenn man es in Prism benutzt. Ich denke, wenn ich meine Anforderungen aufliste, kann mich jemand auf die richtigen Technologien hinweisen (auch wenn es nicht Prism 4 ist).

  • Die Anwendung ist in WPF (NICHT Silverlight) geschrieben werden.
  • Die Hauptanwendung wird extrem dünn sein.
  • Die Hauptanwendung verwendet einen Webdienst, um das Menü der "Apps/Module" zu erstellen, auf die eine Person Zugriff hat.
  • Die "Apps/Module" werden vollständig in anderen verwalteten Bibliotheken enthalten sein.
  • Die Hauptanwendung ruft Views und Viewmodels durch Reflektion in diese DLLs.
  • Die Hauptanwendung sollte Dienste für die Protokollierung usw. in diese "Apps/Module" einspeisen.

Zum Beispiel:

  • Viewonly Adresseintrags

Alle Artikel Adresse verwandt sind innerhalb Address.dll:

Ein grundlegender Benutzer die Optionen haben könnte.

  • Neue Adresse Rekord
  • Adresseneintrag öffnen (update/delete)
  • Benutzer verwalten

Alle Artikel Adresse verwandt sind:

Eine erweiterte Benutzer die Optionen haben könnten in Address.dll.
Alle Elemente, die Sie verwalten, sind in Admin.dll. Die App sollte eigentlich keine dieser DLLs referenzieren, ich plane, in sie zu reflektieren, so dass, wenn es 100 verschiedene Module gibt und ein Benutzer nur Zugriff auf 2 von ihnen hat, nur 2 von ihnen heruntergeladen und verwendet werden. Während ein Benutzer, der Zugang zu 10 von ihnen hat, diese 10 bekommt.

Ich habe bereits die Download-DLL über WebService gelöst. :)

+0

Verwenden von 2.1 von Prism mit Unity und WPF ... war bis jetzt glücklich, habe MEF nicht persönlich benutzt, obwohl ... –

+0

Womit bist du am Ende gegangen? Ich schaue mir ein ähnliches Scoped-Projekt an, so dass dein Input großartig wäre. – John

+0

@ John: Pure MEF. –

Antwort

21

Keine ist "besser": sie sind verschiedene Dinge.

IMO Ihre Wahl sollte nur von Ihren Anforderungen getrieben werden. Basierend auf den Anforderungen, die Sie hier gepostet haben, empfehle ich Ihnen, MEF zu verwenden, da Sie Module in DLLs enthalten und die Hauptanwendung keine Module zu laden weiß. Diese Aufgaben sind der Grund, warum MEF existiert.

Auf jeden Fall konnte man sie beide verwenden: MEF für Modularität und Unity Vorteile von Dependency Injection zu nehmen (Testbarkeit, Wiederverwertbarkeit, ...)

+0

Sind sie nett zueinander oder sind hier einige wirklich schlechte Wachstumsschmerzen, wenn es darum geht, dass sie zusammenarbeiten (MEF/Unity). –

+10

Ich arbeite mit ihnen zusammen. Sie sind völlig unabhängig. Der einzige Schmerz ist, wenn Sie etwas neu entwerfen und Sie müssen angeben, ob es eine injizierbare Abhängigkeit oder eine externe Komponente ist. Aber die meiste Zeit ist einfach. – onof

+6

Erklären Sie meine +1 auf Ihren Kommentar: Ich mag die ** injizierbare Abhängigkeit ** vs ** externe Komponente ** Phrasierung, um zu helfen, zu unterscheiden, was von Einheit oder Mef gedient würde. – odalet

4

Wenn alle Module nicht zur gleichen Zeit wie die App neu kompiliert, Dann gibt es bei MEF viele Möglichkeiten, mit sich ändernden Oberflächen in der Haupt-App umzugehen. Andernfalls MEF kann komplexer sein, als Sie brauchen.

2

Ich habe Unity über ein Jahr mit PRISM verwendet, aber ich habe einige schwerwiegende Probleme mit Speicherlecks bemerkt. Daher entschied ich mich PRISM 4 und MEF zu geben. Was ich getan habe, ist zuerst meine App zu konvertieren, um PRISM 4 mit Unity zu verwenden. Dann habe ich einen Zweig konvertiert, um MEF zu verwenden. Es mag komisch klingen, aber MEF scheint Speicherverbrauch zu behandeln und irgendwie besser als Unity zu veröffentlichen.

Wäre es schön zu hören, ob andere die gleiche Erfahrung gemacht haben?

+0

klingt interessant – Shimmy

+9

Ich kann nicht verstehen, warum diese Antwort 3 + hat, ohne Kommentare. Entweder ist dies anderen Leuten passiert (deshalb sollten sie +1 UND kommentieren), oder das Speicherleck ist völlig unzusammenhängend mit Unity. Ich selbst habe noch nie so etwas erlebt. –

2

Auf Ihre Frage, ob MEF und UNITY gut miteinander funktionieren können, kann ich Ihnen sagen, dass sie wirklich gut miteinander arbeiten. Ich habe eine Proof-of-Concept-Anwendung entwickelt, die PRISM, Unity und MEF verwendet.

+5

Können Sie diese Anwendung mit uns teilen? – John

Verwandte Themen