Add-Ins und Erweiterbarkeit

Add-Ins stellen erweiterte Features oder Dienste für eine Hostanwendung bereit. .NET Framework stellt ein Programmiermodell bereit, mit dem Entwickler Add-Ins entwickeln und in ihrer Hostanwendung aktivieren können. Zu diesem Zweck erstellt das Modell eine Kommunikationspipeline zwischen dem Host und dem Add-In. Das Modell wird implementiert, indem die Typen in den Namespaces System.AddIn, System.AddIn.Hosting, System.AddIn.Pipeline und System.AddIn.Contract verwendet werden.

Diese Übersicht enthält folgende Abschnitte:

  • Add-In-Modell

  • Unterscheiden zwischen Add-Ins und Hosts

  • Verwandte Themen

  • Verweise

HinweisHinweis

Zusätzlichen Beispielcode und Community Technology Previews von Tools für die Erstellung von Add-In-Pipelines finden Sie auf der Managed Extensibility and Add-In Framework-Website auf CodePlex.

Add-In-Modell

Das Add-In-Modell besteht aus einer Reihe von Segmenten, die die Add-In-Pipeline (wird auch als Kommunikationspipeline bezeichnet) bilden, die für die gesamte Kommunikation zwischen dem Add-In und dem Host verantwortlich ist. Die Pipeline ist ein symmetrisches Kommunikationsmodell aus Segmenten, die Daten zwischen einem Add-In und dessen Host austauschen. Die Entwicklung dieser Segmente zwischen dem Host und dem Add-In stellt die erforderlichen Abstraktionsebenen bereit, die die Versionsverwaltung und Isolation des Add-Ins unterstützen.

Die folgende Abbildung zeigt die Pipeline.

Add-In-Pipeline

Add-In-Pipeline-Modell

Die Assemblys für diese Segmente müssen sich nicht in derselben Anwendungsdomäne befinden. Sie können ein Add-In in seine eigene neue Anwendungsdomäne, in eine vorhandene Anwendungsdomäne oder sogar in die Anwendungsdomäne des Hosts laden. Sie können mehrere Add-Ins in dieselbe Anwendungsdomäne laden. Dadurch können die Add-Ins Ressourcen und Sicherheitskontexte gemeinsam nutzen.

Das Add-In-Modell unterstützt und empfiehlt eine optionale Grenze zwischen dem Host und dem Add-In, die als Isolationsgrenze bezeichnet wird (auch unter der Bezeichnung Remotegrenze bekannt). Diese Grenze kann eine Anwendungsdomänen- oder Prozessgrenze sein.

Das Vertragssegment in der Mitte der Pipeline wird in die Anwendungsdomäne des Hosts und in die Anwendungsdomäne des Add-Ins geladen. Der Vertrag definiert die virtuellen Methoden, mit denen der Host und das Add-In Typen austauschen.

Um die Isolationsgrenze zu überwinden, müssen Typen entweder Verträge oder serialisierbare Typen sein. Typen, die weder Verträge noch serialisierbare Typen sind, müssen von den Adaptersegmenten in der Pipeline konvertiert werden.

Die Ansichtssegmente der Pipeline sind abstrakte Basisklassen oder Schnittstellen, die dem Host und dem Add-In eine Ansicht der gemäß der Definition im Vertrag gemeinsam genutzten Methoden bereitstellen.

Weitere Informationen zum Entwickeln von Pipelinesegmenten finden Sie unter Pipeline-Entwicklung.

In den folgenden Abschnitten werden die Funktionen des Add-In-Modells erläutert.

Unabhängige Versionsverwaltung

Das Add-In-Modell ermöglicht Hosts und Add-Ins die unabhängige Versionsverwaltung. Dadurch ermöglicht das Add-In-Modell die folgenden Szenarios:

  • Erstellen eines Adapters, mit dem ein Host ein Add-In verwenden kann, das für eine vorherige Hostversion entwickelt wurde.

  • Erstellen eines Adapters, mit dem ein Host ein Add-In verwenden kann, das für eine neuere Hostversion entwickelt wurde.

  • Erstellen eines Adapters, mit dem ein Host Add-Ins verwenden kann, die für einen anderen Host entwickelt wurden.

Ermittlung und Aktivierung

Sie können ein Add-In aktivieren, indem Sie einen Token aus einer Auflistung verwenden, die die in einem Informationsspeicher gefundenen Add-Ins darstellt. Add-Ins werden anhand des Typs gesucht, der die Hostansicht des Add-Ins definiert. Sie können auch ein bestimmtes Add-In anhand des Typs suchen, der das Add-In definiert. Der Informationsspeicher besteht aus zwei Cachedateien: dem Pipelinespeicher und dem Add-In-Speicher.

Informationen zum Aktualisieren und Neuerstellen des Informationsspeichers finden Sie unter Ermitteln von Add-Ins. Informationen zum Aktivieren von Add-Ins finden Sie unter Add-In-Aktivierung und Gewusst wie: Aktivieren von Add-Ins mit unterschiedlichen Isolations- und Sicherheitsstufen.

Isolationsstufen und externe Prozesse

Das Add-In-Modell unterstützt mehrere Isolationsstufen zwischen einem Add-In und seinem Host oder zwischen Add-Ins. Folgende Stufen werden unterstützt, beginnend bei der Stufe mit der niedrigsten Isolation:

  • Das Add-In wird in derselben Anwendungsdomäne ausgeführt wie der Host. Dies ist nicht empfehlenswert, da Sie die Isolations- und Entladefunktionen verlieren, über die Sie verfügen, wenn Sie unterschiedliche Anwendungsdomänen verwenden.

  • Mehrere Add-Ins werden in dieselbe Anwendungsdomäne geladen, die sich von der vom Host verwendeten Anwendungsdomäne unterscheidet.

  • Jedes Add-In wird ausschließlich in seine eigene Anwendungsdomäne geladen. Dies ist die am häufigsten verwendete Isolationsstufe.

  • Mehrere Add-Ins werden in dieselbe Anwendungsdomäne in einem externen Prozess geladen.

  • Jedes Add-In wird ausschließlich in seine eigene Anwendungsdomäne in einem externen Prozess geladen. Dies ist das Szenario mit der stärksten Isolation.

Weitere Informationen über die Verwendung externer Prozesse finden Sie unter Gewusst wie: Aktivieren von Add-Ins mit unterschiedlichen Isolations- und Sicherheitsstufen.

Verwaltung der Lebensdauer

Da das Add-In-Modell Anwendungsdomänen- und Prozessgrenzen überschreitet, reicht die Garbage Collection nicht aus, um Objekte freizugeben. Das Add-In-Modell bietet einen Mechanismus zur Verwaltung der Lebensdauer, der Token und Referenzzähler verwendet und in der Regel keine zusätzliche Programmierung erfordert. Weitere Informationen finden Sie unter Verwaltung der Lebensdauer.

Zurück nach oben

Unterscheiden zwischen Add-Ins und Hosts

Der Unterschied zwischen einem Add-In und einem Host besteht darin, dass der Host das Element ist, das das Add-In aktiviert. Der Host kann das größere der beiden Elemente, wie z. B. eine Textverarbeitungsanwendung mit ihren Rechtschreibprüfungen, oder das kleinere der beiden Elemente sein, wie z. B. ein Instant Messaging-Client mit einem eingebetteten Media Player. Das Add-In-Modell unterstützt Add-Ins sowohl in Client- als auch in Serverszenarios. Beispiele für Server-Add-Ins sind Add-Ins, die Virenschutz, Spamfilter und IP-Schutz für Mailserver bereitstellen. Beispiele für Client-Add-Ins umfassen Referenz-Add-Ins für Textverarbeitungsprogramme, spezielle Funktionen für Grafikprogramme und Spiele sowie Virenschutz für lokale E-Mail-Clients.

Zurück nach oben

Verwandte Themen

Titel

Beschreibung

Pipeline-Entwicklung

Beschreibt die Kommunikationspipeline von Segmenten, die von der Hostanwendung zum Add-In führt. Es werden Codebeispiele in exemplarischen Vorgehensweisen bereitgestellt. Darin wird beschrieben, wie Sie die Pipeline erstellen und Segmente für die Pipeline in Visual Studio bereitstellen.

Ermitteln von Add-Ins

Beschreibt, wie Sie Add-Ins für Hostanwendungen erkennbar machen.

Add-In-Aktivierung

Beschreibt das Aktivieren und Deaktivieren von Add-Ins.

Add-In-Leistung

Beschreibt die Verwendung des domänenneutralen Ladens von Assemblys und systemeigener Bilder zur Steigerung der Add-In-Leistung.

Gewusst wie: Aktivieren von Add-Ins mit unterschiedlichen Isolations- und Sicherheitsstufen

Beschreibt das Aktivieren von Add-Ins in einer Vielzahl von Anwendungsdomänen, Prozessen und Sicherheitsebenen.

Gewusst wie: Verwenden von Qualifizierungsdaten

Beschreibt, wie Sie benutzerdefinierte Daten, die Add-Ins und Pipelinesegmenten zugeordnet sind, anwenden und darauf zugreifen.

Einfache Add-In-Entwicklung

Beschreibt, wie Sie ein Add-Ins so entwickeln, dass es die erforderlichen Segmente der Add-In-Pipeline verwendet.

Anwendungsdomänen und Assemblys

Beschreibt die Beziehung zwischen Assemblys und Anwendungsdomänen, die eine Isolationsbegrenzung für Sicherheit, Zuverlässigkeit und Versionsverwaltung bereitstellen.

Zurück nach oben

Verweise

System.AddIn

System.AddIn.Contract

System.AddIn.Hosting

System.AddIn.Pipeline

Zurück nach oben