Freigeben über


Managed Extensibility Framework im Editor

Der Editor wird erstellt, indem Komponenten des Managed Extensibility Framework (MEF) verwendet. Sie können erstellen, MEF-Komponenten verfügen, um den Editor zu erweitern, und der Code kann auch Komponenten Editor nutzen.

Übersicht über das Managed Extensibility Framework

Mit dem MEF ist eine .NET-Bibliothek, die Funktionen einer Anwendung oder Komponente hinzufügen und ändern können, die dem MEF-Programmiermodell folgt. Der Visual Studio-Editor kann MEF-Komponenten-Teile bereitstellen und verarbeiten.

Mit dem MEF ist in der Assembly von .NET Framework, Version 4 System.ComponentModel.Composition.dll enthalten.

Weitere Informationen über MEF finden Sie unter Managed Extensibility Framework (MEF).

Komponenten und Kompositions-Container

Eine Komponente ist eine Klasse oder ein Member einer Klasse, die eine (oder beide) der folgenden Schritte ausführen kann:

  • Verarbeiten von einer anderen Komponente

  • Werden von einer anderen Komponente verwendet Sie

Betrachten Sie z. B. eine Einkaufsanwendung, die über eine Komponente verfügt, die Bestellungen von Lotus Produkt aus der Daten abhängt Verfügbarkeit von Warehouse-Inventar, die von einer Komponente bereitgestellt werden. In MEF-Ausdrücken kann der Bestand Verfügbarkeit von Produkt gehört Daten exportieren und der Bestellungen beteiligt Zieleintrags kann die Daten importieren . Der Aufträge von Lotus teil und der Bestand teil müssen nicht auskennen, untereinander an Bereitstellung (der Kompositionscontainer von der Hostanwendung) ist für die Verwaltung des Satzes der Exporte und Auflösen der Exporte und Importe verantwortlich.

Der Kompositionscontainer, CompositionContainer, wird vom Host in der Regel im Besitz. Der Kompositionscontainer verwaltet einen Katalog von exportierten Komponenten.

Exportieren und Importieren von Komponenten

Sie können jede Funktion exportieren, solange sie als öffentliche Klasse oder öffentlicher Member einer Klasse implementiert wird () - Methode oder Eigenschaft. Sie müssen die Komponente nicht von ComposablePartberechnen. Stattdessen müssen Sie ein ExportAttribute-Attribut der Klasse oder dem Klassenmember hinzu, die Sie exportieren möchten. Dieses Attribut gibt den Vertrag an, für den eine andere Komponente die Funktionen importiert werden kann.

Der Export-Vertrag

ExportAttribute definiert die Entität (Klasse, Schnittstelle oder Struktur), die exportiert wird. In der Regel übernimmt das Export Attribut für einen Parameter, der den Typ des Exports angibt.

[Export(typeof(ContentTypeDefinition))]
class TestContentTypeDefinition : ContentTypeDefinition {   }

Standardmäßig wird das ExportAttribute-Attribut einen Vertrag, der den Typ der exportierenden Klasse ist.

[Export]
[Name("Structure")]
[Order(After = "Selection", Before = "Text")]
class TestAdornmentLayerDefinition : AdornmentLayerDefinition {   }

Im Beispiel lautet das Standardformat [Export]-Attribut auf [Export(typeof(TestAdornmentLayerDefinition))].

Sie können eine Eigenschaft oder eine Methode, wie im folgenden Beispiel gezeigt auch exportieren.

[Export]
[Name("Scarlet")]
[Order(After = "Selection", Before = "Text")]
public AdornmentLayerDefinition scarletLayerDefinition;

Importieren eines MEF-Export

Wenn Sie einen MEF-Export nutzen möchten, müssen Sie den Vertrag (in der Regel den Typ bekannt), durch das es exportiert wurde, und ein ImportAttribute-Attribut hinzufügen, das diesen Wert verfügt. Standardmäßig erhält das Importieren Attribut für einen Parameter, der den Typ der Klasse ist, die geändert wird. Die folgenden Codezeilen importieren den IClassificationTypeRegistryService-Typ.

[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;

Editor-Funktionalität aus einem MEF-Komponenten-Teil abrufen

Wenn der vorhandene Code ein MEF-Komponenten-Teil ist, können Sie mithilfe von Editor MEF-Metadaten Komponenten zu nutzen.

So verwenden MEF-Komponenten-Teil Funktionen aus einem Editor

  1. Fügen Sie Verweise auf System.Composition.ComponentModel.dll hinzu, das im globalen Assemblycache (GAC) ist, und den Editor Assemblies.

  2. Fügen Sie das relevante using-Anweisungen hinzu.

    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text;
    
  3. Fügen Sie das [Import]-Attribut der Dienstschnittstelle wie folgt hinzu.

    [Import]
    ITextBufferFactoryService textBufferService;
    
  4. Wenn der Dienst erhalten haben, können Sie eine beliebige seiner Komponenten verarbeiten.

  5. Wenn Sie die Assembly kompiliert haben, fügen Sie sie im Ordner " ein. \ Common7 \ IDE \ Komponenten \ der Visual Studio-Installation.

Siehe auch

Konzepte

Editor-Erweiterungs-Punkte