2010-11-23 11 views
0

Ich habe eine .NET 2.0-Anwendung. Ich möchte ein Plugin erstellen, das in irgendeiner Weise Zugriff auf die Hauptanwendung hat.Gibt es eine Möglichkeit, eine Plugin-Kontrolle von Teilen einer Anwendung direkt in C# zu geben?

Mein Grund ist, dass ich in der Lage sein möchte, Dinge wie Schaltflächen und Menüelemente dynamisch zu einem Formular hinzuzufügen, anstatt einen Menüpunkt namens "Plugins" zu haben, den ich aktualisiere. Dies ist so, dass ich Dinge zur Anwendungs-GUI hinzufügen kann, ohne die gesamte Anwendung erneut zu veröffentlichen.

Im Moment kann ich mir zwei Möglichkeiten vorstellen. Zum einen kann ich das Plugin so erstellen, dass es immer einen Verweis auf die gesamte Anwendung, inklusive aller Formulare, erwartet. Ich kann ihm Zugang zu den von mir in den Formularen gewählten Elementen gewähren und es kann Kontrollen oder was auch immer nach Belieben hinzufügen. Das macht mich ein wenig unruhig, aber wenn das akzeptabel ist, lass es mich wissen.

Der andere Weg, den ich mir vorstellen kann, ist, eine Art Schnittstelle für jedes Formular in der Hauptanwendung zu haben, so dass ich diese Schnittstelle verwenden kann, um auf die aktuellen Formulare in der App zuzugreifen. Ich bin mir jedoch nicht sicher, wie ich das umsetzen soll.

Alle Hilfe, Vorschläge, Website-Referenzen und Kommentare sind willkommen.

Antwort

2

Zum Teil kommt es darauf an, wer Ihre Plug-ins schreibt, ob Sie ihnen vertrauen und was passiert mit den Erfahrungen oder Daten des Benutzers, wenn ein Plug-in fehlerhaft wird?

Fiddler http://www.fiddler2.com/fiddler2/ ist ein Web-Debugging-Proxy, der ein Plug-in-Modell hat, das Ihrer ersten Wahl sehr ähnlich ist - alles dem Plug-in-Writer aussetzen und hoffen, dass sie nichts vermasseln. Das macht das Schreiben von Erweiterungen zu Fiddler sehr einfach, aber es bedeutet, dass Sie vorsichtig sein müssen.

Wenn Sie mit diesem Ansatz unzufrieden sind, würde ich Ihnen empfehlen, sich 2 .NET-Technologien anzuschauen, die Ihnen helfen könnten.

Die erste ist der Namespace System.AddIn http://msdn.microsoft.com/en-us/library/gg145020.aspx. Mit den Typen in diesem Namespace können Sie Anwendungen erstellen, die AddIns unterstützen.

Die zweite ist MEF http://mef.codeplex.com/. Das Managed Extensibility Framework ist eine sehr leistungsfähige API zum Beschreiben von Anwendungsanforderungen und ermöglicht es Ihnen, stark erweiterbare Anwendungen zu erstellen.

Im Hinblick auf MEF und WinForms prüfen diese Frage SO aus:

Winforms with MEF

0

würde Der zweite Ansatz preferible sein, Sie eine Schnittstelle IApplication mit all den modifizierbaren/steckbare Teile Ihres appilcations schaffen könnte und verlangen, dass alle Plugins implementieren und IModifyApp Schnittstelle mit einigen Verfahren wie IModifyApp.Modify(IApplication), die eine Instanz des IApplication nimmt und Gibt eine geänderte Instanz für die zu verarbeitende Anwendung zurück.

Sie sollten auch auschecken MEF Das Microsoft Managed Extensibility Framework.

0

Was ich vor für dieses Szenario ein bisschen verwendet wird AppDomain getan haben. Das ist wie ein Prozess in Ihrem Hauptprozess. Sie können Assemblys in der AppDomain laden und entladen, um den Hauptprozess stoppen zu müssen. Solange Ihr Hauptprozess von Interfaces weiß, die von der "updates" -Dll in der AppDomain geladen wurden, kann er keine Probleme verursachen. Wenn nicht, dann gibt es immer Reflexionen :)

0

Vielleicht möchten Sie etwas wie CAB/Prism auf Ihre Bedürfnisse richten.Ein Großteil des UI-y-Ness (Fachbegriffs) ist durch eine Reihe von Abstraktionen in diesen integriert.

http://compositewpf.codeplex.com/

Verwandte Themen