Meine Anwendung sollte erweiterbar sein. Für meine eigenen Bedürfnisse habe ich einige Dienste implementiert. Diese Dienste basieren auf dem IoC/DI-Prinzip. Die Dienste kapseln also das Konzept der Anwendung ein.Best Practices für die Implementierung einer Add-in/Addon/Plugin-Strategie
Zum Beispiel gibt es einen IApplicationService. Der ApplicationService gibt Informationen über die aktuelle ausgehende Anwendung aus. Dort sind die AssemblyInfo usw. angegeben. Ein anderes Beispiel ist der INavigationService (siehe mef.codeplexcom in den Beispielen). Dieser Dienst stellt einige Eigenschaften zur Verfügung, die Informationen über das aktuell ausgewählte Objekt und einige Ereignisse enthalten.
Ich denke, dass die "Service-Ansatz" ist die einfachste und vereinfacht die Erweiterungspunkte für die Anwendung. Ich bin mir also nicht sicher, ob das wirklich der beste Ansatz ist. Was denken Sie? Wie würden Sie "Erweiterungspunkte" in einer Anwendung wie Addins/Addons/Plugins implementieren?
Vielen Dank im Voraus für Ihre Antworten! Und tut mir leid, mein Englisch ist schlecht. ;)
Wenn Sie Informationen hinzufügen möchten, ** aktualisieren ** Sie Ihren ursprünglichen Beitrag, indem Sie ihn bearbeiten - fügen Sie keine eigene Antwort hinzu - macht es schwerer zu folgen ... –
Ja, MEF ist ** nicht ** a DI-Container - da unterscheidet sich seine Aufgabe von einem DI-Container. Aber ich stimme nicht zu - Mischen von MEF und einem DI-Container (wie StructureMap oder Unity) ist wirklich nicht so schwer und kann ganz gut gemacht werden. Sie müssen vielleicht genauer erklären, warum Sie nicht denken, dass dies für oyu funktionieren würde ... –
Das Laden in eine AppDomain zu verwalten ist nicht-trivial und ich denke nicht, dass die meisten DI-Frameworks das auch handhaben werden. Alle Ihre Dienste müssen zum Überschreiten der AppDomain-Grenze weitergeleitet werden. Dies bedeutet auch, dass alle Klassen, die hin- und hergehen, entweder MarshalByRef oder Serializable sein müssen.Sie können erwägen, eine Kategorie von "vertrauenswürdigen" Erweiterungen (ohne Marshalling) und eine andere Kategorie von "nicht vertrauenswürdigen" Erweiterungen, die nur Zugriff auf eine begrenzte Anzahl von Marshalling-Diensten erhalten. –