Pipeline-Entwicklung

Die Add-In-Pipeline ist der Pfad von Pipelinesegmenten, die die Hostanwendung und deren Add-In verwenden müssen, um miteinander zu kommunizieren.

In der folgenden Abbildung wird die Kommunikationspipeline mit den zugehörigen Segmenten dargestellt.

Add-In-Pipeline

Add-In-Pipeline-Modell

Die Hostanwendung befindet sich am einen Ende der Pipeline und das Add-In am anderen Ende. Von jedem Ende aus in Richtung Mitte haben sowohl die Hostanwendung als auch das Add-In eine abstrakte Basisklasse, die eine Ansicht des gemeinsam genutzten Objektmodells definiert. Diese Typen (Klassen) bilden das Pipelinesegment der Add-In-Ansicht und die Hostansicht des Add-In-Pipelinesegments. Das Pipelinesegment der Add-In-Ansicht enthält häufig mehrere abstrakte Klassen, die Klasse, aus der das Add-In geerbt wird, wird jedoch als Add-In-Basis bezeichnet.

Das Pipelinesegment des Add-In-seitigen Adapters und das Pipelinesegment des hostseitigen Adapters konvertieren den Fluss von Typen zwischen den Ansichtspipelinesegmenten und dem Vertragspipelinesegment. Das zentrale Segment der Pipeline ist ein Vertrag, der von der IContract-Schnittstelle abgeleitet wird. Dieser Vertrag definiert die Methoden, die von der Hostanwendung und deren Add-In verwendet werden.

Wenn Sie den Host und das Add-In in separate Anwendungsdomänen laden, verfügen Sie über eine Isolationsgrenze, die den Gültigkeitsbereich der Hostanwendung vom Gültigkeitsbereich des Add-Ins trennt. Der Vertrag ist die einzige Assembly, die sowohl in die Hostanwendungsdomäne als auch in die Add-In-Anwendungsdomäne geladen wird. Der Host und das Add-In verweisen jeweils nur auf ihre Ansicht der Vertragsmethoden. Deshalb werden sie durch eine Abstraktionsebene vom Vertrag getrennt.

Um Pipelinesegmente zu entwickeln, müssen Sie eine Verzeichnisstruktur erstellen, die sie enthält. Weitere Informationen über Entwicklungsanforderungen und Richtlinien zum Gültigkeitsbereich finden Sie unter Anforderungen für die Pipelineentwicklung.

In der folgenden Abbildung sind die Typen dargestellt, aus denen die Pipelinesegmente bestehen. Die in der Abbildung dargestellten Namen der Typen sind willkürlich, jedoch erfordern mit Ausnahme des Hosts und der Hostansicht des Add-Ins alle Typen Attribute, sodass sie mit Methoden erkannt werden können, die einen Informationsspeicher erstellen.

Add-In-Pipeline mit Typen

Add-In-Modell mit erforderlichen Attributen für Typen

In der folgenden Tabelle werden die Pipelinesegmente zum Aktivieren eines Add-Ins beschrieben. Weitere Informationen zu diesen Segmenten finden Sie unter Verträge, Ansichten und Adapter.

Pipelinesegment

Beschreibung

Host

Die Anwendungsassembly, die eine Instanz eines Add-Ins erstellt.

Hostansicht des Add-Ins

Stellt die Ansicht der Hostanwendung der Objekttypen und Methoden dar, die verwendet werden, um mit dem Add-In zu kommunizieren. Die Hostansicht ist eine abstrakte Basisklasse oder eine Schnittstelle.

Hostseitiger Adapter

Eine Assembly mit einer oder mehreren Klassen, die Methoden in und aus dem Vertrag anpassen.

Dieses Pipelinesegment wird mit dem HostAdapterAttribute-Attribut identifiziert.

Assemblys mit mehreren Modulen werden nicht unterstützt.

Vertrag

Eine Schnittstelle, die von der IContract-Schnittstelle abgeleitet wird und das Protokoll für die Kommunikation von Typen zwischen dem Host und dessen Add-In definiert.

Dieses Pipelinesegment wird durch Festlegen des AddInContractAttribute-Attributs identifiziert.

Add-In-seitiger Adapter

Eine Assembly mit einer oder mehreren Klassen, die Methoden in und aus dem Vertrag anpassen.

Dieses Pipelinesegment wird mit dem AddInAdapterAttribute-Attribut identifiziert.

Jede Assembly im Add-In-seitigen Adapterverzeichnis, die einen Typ mit einem AddInAdapterAttribute-Attribut enthält, wird in die Anwendungsdomäne des Add-Ins geladen.

Jede Assembly im Add-In-seitigen Verzeichnis wird in ihre eigene Anwendungsdomäne geladen.

Assemblys mit mehreren Modulen werden nicht unterstützt.

Add-In-Ansicht

Eine Assembly, die die Ansicht des Add-Ins der Objekttypen und Methoden darstellt, die verwendet werden, um mit dem Host zu kommunizieren. Die Add-In-Ansicht ist eine abstrakte Basisklasse oder eine Schnittstelle.

Dieses Pipelinesegment wird mit dem AddInBaseAttribute-Attribut identifiziert.

Jede Assembly im Verzeichnis AddInViews, die einen Typ mit einem AddInBaseAttribute-Attribut enthält, wird in die Anwendungsdomäne des Add-Ins geladen.

Add-In

Ein instanziierter Typ, der einen Dienst für den Host ausführt.

Pipelineaktivierungspfad

In der folgenden Abbildung ist die Aktivierung von Typen dargestellt, wenn ein Add-In aktiviert wird. Außerdem wird die Übergabe von Objekten, wie z. B. die Ergebnisse einer Berechnung oder eine Auflistung von Objekten, an den Host dargestellt. Dies ist das häufigste Szenario.

Aktivierungspfad vom Add-In zum Host

Add-In-Modell mit Aktivierungspfad.

Der Aktivierungspfad der Pipeline verläuft wie folgt:

  1. Die Hostanwendung aktiviert das Add-In mit der Activate-Methode.

  2. Das Add-In, die Add-In-Ansicht, der Add-In-seitige Adapter und die Vertragsassemblys werden in die Anwendungsdomäne des Add-Ins geladen.

  3. Eine Instanz des Add-In-seitigen Adapters wird mit der Add-In-Ansicht (die Klasse wird durch das AddInBaseAttribute-Attribut identifiziert) als Konstruktor erstellt. Der Add-In-seitige Adapter erbt vom Vertrag.

  4. Der Add-In-seitige Adapter, der als der Vertrag typisiert wird, wird über die (optionale) Isolationsgrenze an den Konstruktor des hostseitigen Adapters übergeben.

  5. Die Hostansicht des Add-Ins, hostseitige Adapter und die Vertragsassemblys werden in die Anwendungsdomäne des Hosts geladen.

  6. Eine Instanz des hostseitigen Adapters wird mit dem Vertrag als Konstruktor erstellt. Der hostseitige Adapter erbt von der Hostansicht des Add-Ins.

  7. Der Host verfügt über das Add-In, das als die Hostansicht des Add-Ins typisiert wird, und kann mit dem Aufrufen der Methoden fortfahren.

Exemplarische Vorgehensweisen

Es gibt drei exemplarische Vorgehensweisen, die beschreiben, wie Pipelines mit Visual Studio erstellt werden:

Siehe auch

Konzepte

Szenarien für Add-In-Pipelines

Add-Ins und Erweiterbarkeit