Was Danielg gesagt hat, ist gut. Ich würde hinzufügen:
Wenn Sie die Videos über System.Addins sehen, sprechen sie eindeutig über sehr große Projekte. Er spricht über ein Team Verwalten der Host-Anwendung, ein weiteres Team Verwalten jedes AddIn, und ein drittes Team Verwalten des Vertrags und der Pipeline. Darauf basierend denke ich System.Addins ist eindeutig für größere Anwendungen. Ich denke Anwendungen wie ERP-Systeme wie SAP (vielleicht nicht so groß, aber Sie bekommen die Idee). Wenn Sie diese Videos angesehen haben, können Sie feststellen, dass der Arbeitsaufwand für System.Addins sehr hoch ist. Es würde gut funktionieren, wenn Sie viele Unternehmen hätten, die Drittanbieter-Add-Ins für Ihr System programmieren, und Sie können keine dieser Add-In-Verträge unter Todesstrafe brechen.
Auf der anderen Seite, MEF scheint mehr Gemeinsamkeiten zu SharpDevelop Add-In-Schema, die Eclipse-Plugin-Architektur oder Mono.Addins zu teilen. Es ist viel einfacher zu verstehen als System.Addins und ich glaube, dass es viel flexibler ist. Die Dinge, die Sie verlieren, sind, dass Sie keine AppDomain-Isolierung oder starke Versionierungsverträge mit MEF erhalten. Die Stärke von MEF besteht darin, dass Sie Ihre gesamte Anwendung als eine Zusammenstellung von Teilen strukturieren können. So können Sie Ihr Produkt in verschiedenen Konfigurationen für verschiedene Kunden bereitstellen. Wenn der Kunde ein neues Feature kauft, legen Sie einfach das Teil für dieses Feature in sein Installationsverzeichnis und die Anwendung sieht es und führt es aus. Es erleichtert auch das Testen. Sie können das Objekt, das Sie testen möchten, instanziieren und es für alle Abhängigkeiten mit einem Mock-Objekt versehen. Wenn es jedoch als eine zusammengesetzte Anwendung ausgeführt wird, hängt der Kompositionsprozess automatisch alle realen Objekte zusammen. Der wichtigste Punkt, den ich erwähnen möchte, ist, dass obwohl System.Addins bereits im Framework ist, ich nicht viele Beweise von Leuten sehe, die es benutzen, aber MEF sitzt dort angeblich nur auf CodePlex in .NET 4 aufgenommen werden, und die Leute beginnen bereits, damit viele Anwendungen zu erstellen (ich selbst eingeschlossen). Ich denke, das sagt etwas über die beiden Frameworks aus.
eine kleine Sache: Bitte denken Sie daran, dass 'separate Appdomain' hilft Ihnen NICHT, wenn Ihr Addon in einer nativen Schicht abstürzt, dafür benötigen Sie noch Arbeitsprozesse. MAF hilft etwas beim Erstellen, aber die dynamische Wiederherstellung nach einem solchen Absturz ist immer noch ziemlich schwierig (aber möglich) – quetzalcoatl
@Ian: Bitte lesen Sie meinen Kommentar erneut :) Ich habe genau das geschrieben, und MEHR: MAF erlaubt das wirklich, aber Sie müssen stehe nach dem Crash ganz alleine auf. – quetzalcoatl
@DanielG> es kommt mit einem hohen Preis, den Sie zahlen müssen, um appdomains zu überqueren