2009-08-24 14 views

Antwort

8

Edit: Sie diese Antwort nicht lesen. Es ist peinlich falsch. Ich bin scheitern. Lies Glenn Block's unten.

Es ist nicht offensichtlich, aber das ist die gleiche Frage: Managed Extensibility Framework (MEF) vs. Composite UI Application Block (CAB)

Konsens im doppelten Beitrag ist, dass MEF und Prism den gleichen grundlegenden Satz von Funktionen auf unterschiedliche Weise zur Verfügung stellen, mit der Ausnahme, dass Prism die Event Aggregator liefert, Das ist ein Pub-Sub-Mittel zur Kommunikation zwischen Anwendungskomponenten. Sie können dies jedoch mit MEF verwenden. Es ist ziemlich viel zu bevorzugen, wirklich.

+5

Ugh ... Ich weiß, dass es von vor einem Jahr war, und ich habe viel gelernt, aber diese Antwort ist wirklich falsch. Glenn Blocks Post ist präziser.Sie können dies am deutlichsten an der Tatsache erkennen, dass Prism V4 eine Option zur Verwendung von * MEF für verschiedene Formen von IoC und Komposition hat. Ich kann meinen eigenen Beitrag nicht löschen oder sogar ablehnen. –

+6

Es ist komisch, etwas zu lesen und zu sagen: "Wer ist dieser Idiot? ... oh" –

+3

+1 für pure Ehrlichkeit. Obwohl Ihre Antwort nicht die "richtigste" ist, gibt sie im Gegensatz zu Glenn's Antwort einen Einblick. Die Linien der Verantwortung/Funktionalität zwischen MEF/Prism/Unity/MAF sind ziemlich unscharf (und Sie verdienen auch keinen Downvote). – Doug

36

Heute würde ich sagen, Prism und MEF einander ergänzen. So wie Prisma und Einheit. Prism führt eine Reihe spezieller Dienste wie RegionManager, DelegateCommand und EventAggregator ein, die beim Erstellen von Composite-Apps helfen. MEF auf der anderen Seite ist ein allgemeinerer Kompositionsmechanismus für die Erweiterbarkeit von Anwendungen und Frameworks, unabhängig davon, ob es sich um Composites handelt oder nicht. Das Hauptmerkmal von MEF ist seine Auffindbarkeit, was bedeutet, dass es alle verfügbaren Teile dynamisch entdecken kann.

Sie könnten bei der Prüfung des MEF contrib Projektes (mefcontrib.codeplex.com), die enthält eine Integrationsschicht für Einheit und MEF interessieren. Mit dieser Erweiterung verwaltet Unity MEF hinter den Kulissen, sodass Sie nicht mit zwei Contianern konkurrieren müssen. Der Vorteil ist, dass Sie Unity für allgemeine Pocos und MEF für die Erkennung von Erweiterungen verwenden können. Da Prism derzeit auf Unity aufbaut, können Sie damit MEF nutzen. Um das contrib-Projekt verwenden zu können, müssen Sie einige kleine Änderungen an Ihrem Unity-Bootstrapper vornehmen, aber es sollte ziemlich trivial sein.

Es gibt definitiv einige Überschneidungen. Der Ort, wo es am meisten hervorsticht, ist in Bezug auf Module. Prism verwendet ein IModul als Mittel zur Entdeckung. In MEF kann jede Komponente ein Teil sein und dynamisch erkannt werden. Das heißt, mit MEF haben Sie von oben nach unten Modularität, während bei Modulen mit Prism mehr granulare Einheiten vorhanden sind. Zusammengesetzte Anwendungen sind definitiv ein Bereich, mit dem wir in der MEF-Zeit konfrontiert sind. Mit der Zeit wird es sehr wahrscheinlich sein, dass Sie immer mehr Unterstützung beim Erstellen solcher Apps innerhalb von MEF sehen werden. Wir arbeiten mit p & p, um sicherzustellen, dass es zu diesem Zeitpunkt einen reibungslosen Übergang gibt.

+0

Beachten Sie jedoch, dass die [MEF-Unterstützung in Prism zu Ende geht] (https://github.com/PrismLibrary/Prism): "MEF wird mit WPF aus Gründen der Kompatibilität mit früheren Versionen unterstützt. Es wird nicht zu Windows 10 UWP oder Xamarin Forms hinzugefügt. " – Informagic

0

MEF wird nie Prisma ersetzen

MEF ist ein Dependency Injection manager.its kein Dependency Injection Container.
MEF bietet die Möglichkeit, Exporte und Importe delklarar über Attribute zuzuweisen.

Prism mit MEF gibt Ihnen Fähigkeit, Fähigkeit, Auto entdeckt DLLs und die Fähigkeit, Plug-in zum Hinzufügen und Entfernen durch das Hinzufügen oder DLLs zu löschen. Wo, wie Prisma Rahmen gibt Ereignis-Aggregator, Region Manager, Service-Locator.

können Sie Prisma ohne MEF verwenden. Es gibt verschiedene andere Optionen wie Ninject, Einheit und andere DI-Container.

können Sie MEF mit Prisma verwenden für Plugin-basierte erweiterbare Anwendungen zu bauen.

Verwandte Themen