2010-06-01 13 views
6

Ich habe nach verschiedenen Methoden der Plug-in-Unterstützung für meine Anwendung gesucht. Idealerweise werde ich eine Kernfunktionalität erstellen und basierend auf verschiedenen Kunden verschiedene Plug-ins/Addons wie das Importieren, Exportieren von Daten usw. entwickeln. Welche Methoden gibt es, um eine C# -Anwendung über eine Plug-In-Architektur erweiterbar zu machen?Wie entwickle ich Dynamic Plug-In-basierte Funktionalität in C#

Lets machen ein Beispiel. Wenn wir ein Programm haben, das aus einem Hauptmenü besteht (Datei, Bearbeiten, Ansicht, usw.), zusammen mit einem TreeView, das verschiedene Marken von Autos gruppiert nach Hersteller (Ford, GM, für jetzt) ​​zeigt. Wenn Sie mit der rechten Maustaste auf ein Auto klicken, wird ein Kontextmenü mit der einzigen Option "Auto löschen" angezeigt.

Wie könnten Sie die Anwendung so entwickeln, dass Plug-Ins bereitgestellt werden könnten, damit Sie einem Kunden eine neue Marke in der TreeView anzeigen lassen können, sagen wir Honda, und das Auto-Kontext-Menü erweitern "ein Auto malen"?

In Eclipse/RCP-Entwicklung wird dies leicht durch Erweiterungspunkte und Plug-Ins behandelt. Wie geht C# damit um? Ich habe meine eigene Plug-in-Architektur entwickelt und MEF gelesen.

Antwort

10

MEF wäre ein guter Anfang.

Glenn Block Artikel Managed Extensibility Framework: Building Composable Apps in .NET 4 with the Managed Extensibility Framework bietet einen guten Überblick.

BTW, lassen Sie sich nicht vom Titel täuschen - Sie können auch MEF für .NET 3.5 SP1 erhalten.

+0

Ich habe eine Reihe von MEF-Videos gesehen, die die Verwendung von Lade-Assemblys, Catelogs und Containern zeigen, aber ich muss noch vollständig verstehen, wie MEF Ihnen erlaubt, ein Plugin zu implementieren, das Ihr Hauptmenü oder ein Kontextmenü für ein gegeben Kontrolle. Ich schätze, ich vermisse den letzten Sprung von dem, was die Videos darstellen, und erlaube meiner Bewerbung, auf die Geschenke von Plugins zu reagieren. Hinzufügen einer neuen Menüschaltfläche zum Hauptmenü zum Beispiel. – Matthew

+0

Das sollte einfacher herauszufinden, wenn Sie MVVM (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx) verwenden. Dadurch können Sie Menüs und MenuItems an ein zugrunde liegendes (Pluggable) Objektmodell binden. –

1

Visual Studio 2010 verwendet MEF, also denke ich, es ist eine sichere Wette das ist der bevorzugte Weg bei MS zu gehen. System.Addin schien immer ein bisschen schwer, aber es könnte eine bessere Wahl sein, wenn Sie Addins immer arbeiten müssen und Ihre Codebasis entwickelt sich ständig weiter.

Wenn Sie über das Isolieren von Addins interessiert sind, sollten Sie auf AppDomains nachlesen. Ich habe ein Demo-Projekt, das ich gemacht habe, um zu lernen, wie man mit isolating assemblies within an AppDomain here umgehen kann, was Sie interessant finden könnten. Schnelle Fakten über Isolation: Nur Ihre Typen sollten jemals die Grenze überschreiten und diese Typen sollten versiegelt werden, um von der domainübergreifenden Ereignisbehandlung zu schreien, und Addins sollten NIEMALS MarshallByRefObject erweitern.

Verwandte Themen