Delen via


Managed Extensibility Framework (Framework voor beheerde uitbreidbaarheid) in de editor

De editor wordt gebouwd met behulp van MEF-onderdelen (Managed Extensibility Framework). U kunt uw eigen MEF-onderdelen bouwen om de editor uit te breiden en uw code kan ook editoronderdelen gebruiken.

De MEF is een .NET-bibliotheek waarmee u functies van een toepassing of onderdeel kunt toevoegen en wijzigen die het MEF-programmeermodel volgen. De Visual Studio-editor kan MEF-componenten leveren en gebruiken.

De MEF is opgenomen in de .NET Framework-versie 4 System.ComponentModel.Composition.dll assembly.

Zie Managed Extensibility Framework (MEF) voor meer informatie over MEF.

Onderdelen en samenstellingscontainers

Een onderdeel is een klasse of lid van een klasse die een (of beide) van het volgende kan doen:

  • Een ander onderdeel verbruiken

  • Worden verbruikt door een ander onderdeel

    Denk bijvoorbeeld aan een winkeltoepassing met een orderinvoeronderdeel dat afhankelijk is van productbeschikbaarheidsgegevens die worden geleverd door een magazijninventarisonderdeel. In MEF-termen kan het voorraadonderdeel productbeschikbaarheidsgegevens exporteren en kan het orderinvoeronderdeel de gegevens importeren . Het bestelgedeelte en het voorraadgedeelte hoeven elkaar niet te kennen; de samenstellingscontainer (geleverd door de hosttoepassing) is verantwoordelijk voor het onderhouden van de set van exports en het verwerken van exports en imports.

    De samenstellingscontainer, CompositionContaineris doorgaans eigendom van de host. De samenstellingscontainer onderhoudt een catalogus met geëxporteerde onderdelen.

Componenten exporteren en importeren

U kunt elke functionaliteit exporteren, zolang deze is geïmplementeerd als een openbare klasse of een openbaar lid van een klasse (eigenschap of methode). U hoeft uw onderdeel niet af te leiden van ComposablePart. In plaats daarvan moet u een ExportAttribute kenmerk toevoegen aan de klasse of het klasselid dat u wilt exporteren. Dit kenmerk geeft het contract aan waarmee een ander onderdeel uw functionaliteit kan importeren.

Het exportcontract

Hiermee ExportAttribute definieert u de entiteit (klasse, interface of structuur) die wordt geëxporteerd. Normaal gesproken gebruikt het exportkenmerk een parameter waarmee het type export wordt opgegeven.

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

Standaard definieert het ExportAttribute kenmerk een contract dat het type van de exportklasse is.

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

In het voorbeeld is het standaardkenmerk [Export] gelijk aan [Export(typeof(TestAdornmentLayerDefinition))].

U kunt ook een eigenschap of methode exporteren, zoals wordt weergegeven in het volgende voorbeeld.

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

Een MEF-export importeren

Wanneer u een MEF-export wilt gebruiken, moet u het contract (meestal het type) kennen waarmee het is geëxporteerd en een ImportAttribute kenmerk met die waarde toevoegen. Standaard heeft het importkenmerk één parameter. Dit is het type klasse dat wordt gewijzigd. Met de volgende regels code importeert u het IClassificationTypeRegistryService type.

[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;

Problemen met importeren/exporteren oplossen: toegang krijgen tot het mef-samenstellingsfoutlogboek

Er kunnen problemen optreden als u iets probeert te importeren dat niet bestaat in de huidige VS-installatie of als u uw import- of export onjuist ontwerpt. De primaire manier om deze problemen te vinden en op te lossen, is om te verwijzen naar het foutenlogboek voor samenstelling van managed Extensibility Framework (MEF), opgeslagen op %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.

Editorfunctionaliteit ophalen uit een onderdeel van een MEF-onderdeel

Als uw bestaande code een onderdeel van een MEF-onderdeel is, kunt u MEF-metagegevens gebruiken om onderdelen van editoronderdelen te gebruiken.

Editorfunctionaliteit gebruiken vanuit een MEF-component

  1. Voeg verwijzingen toe naar System.Composition.ComponentModel.dll, die zich in de algemene assemblycache (GAC) bevindt en aan de editorassembly's.

  2. Voeg de relevante gebruiksrichtlijnen toe.

    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text;
    
  3. Voeg het [Import] kenmerk als volgt toe aan uw service-interface.

    [Import]
    ITextBufferFactoryService textBufferService;
    
  4. Wanneer u de service hebt verkregen, kunt u een van de onderdelen ervan gebruiken.

  5. Wanneer u de assembly hebt gecompileerd, plaatst u deze in de *.. \Common7\IDE\Components* map van uw Visual Studio-installatie.