Dela via


Managed Extensibility Framework i redigeraren

Redigeraren skapas med hjälp av MEF-komponenter (Managed Extensibility Framework). Du kan skapa egna MEF-komponenter för att utöka redigeraren, och koden kan även använda redigerarkomponenter.

MEF är ett .NET-bibliotek där du kan lägga till och ändra funktioner i ett program eller en komponent som följer MEF-programmeringsmodellen. Visual Studio-redigeraren kan både tillhandahålla och använda MEF-komponentdelar.

MEF finns i .NET Framework version 4 System.ComponentModel.Composition.dll sammansättning.

Mer information om MEF finns i Managed Extensibility Framework (MEF).

Komponentdelar och sammansättningscontainrar

En komponentdel är en klass eller en medlem i en klass som kan göra en (eller båda) av följande:

  • Förbruka en annan komponent

  • Förbrukas av en annan komponent

    Du kan till exempel överväga ett shoppingprogram som har en orderinmatningskomponent som är beroende av produkttillgänglighetsdata som tillhandahålls av en lagerinventeringskomponent. I MEF-termer kan inventeringsdelen exportera produkttillgänglighetsdata och orderpostdelen kan importera data. Orderinmatningsdelen och lagerdelen behöver inte känna till varandra. Kompositionscontainern (tillhandahålls av värdprogrammet) ansvarar för att upprätthålla uppsättningen av exporter och hantera exporter och importer.

    Kompositionscontainern, CompositionContainer, ägs vanligtvis av värden. Kompositionscontainern har en katalog med exporterade komponentdelar.

Exportera och importera komponentdelar

Du kan exportera alla funktioner så länge den implementeras som en offentlig klass eller en offentlig medlem i en klass (egenskap eller metod). Du behöver inte härleda komponentdelen från ComposablePart. I stället måste du lägga till ett ExportAttribute attribut till den klass- eller klassmedlem som du vill exportera. Det här attributet anger kontraktet med vilket en annan komponentdel kan importera dina funktioner.

Exportkontraktet

Definierar ExportAttribute den entitet (klass, gränssnitt eller struktur) som exporteras. Vanligtvis tar exportattributet en parameter som anger typen av export.

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

Som standard ExportAttribute definierar attributet ett kontrakt som är typen av exportklass.

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

I exemplet motsvarar [Export]standardattributet [Export(typeof(TestAdornmentLayerDefinition))] .

Du kan också exportera en egenskap eller metod, som du ser i följande exempel.

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

Importera en MEF-export

När du vill använda en MEF-export måste du känna till kontraktet (vanligtvis typen) som det exporterades med och lägga till ett ImportAttribute attribut med det värdet. Som standard tar importattributet en parameter, vilket är den typ av klass som den ändrar. Följande rader med kod importerar IClassificationTypeRegistryService typen.

[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;

Felsöka problem med import/export: Komma åt MEF-kompositionsfelloggen

Du kan få problem om du försöker importera något som inte finns i den aktuella VS-installationen, eller om du felaktigt har skapat din import eller export. Det primära sättet att hitta och åtgärda dessa problem är att referera till Managed Extensibility Framework (MEF) Kompositionsfel Logg, som finns lagrad på %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.

Hämta redigeringsfunktioner från en MEF-komponentdel

Om din befintliga kod är en MEF-komponentdel kan du använda MEF-metadata för att använda redigerarkomponentdelar.

Så här använder du redigeringsfunktioner från en MEF-komponentdel

  1. Lägg till referenser till System.Composition.ComponentModel.dll, som finns i den globala sammansättningscache (GAC) och till redigeringssammansättningarna.

  2. Lägg till relevanta med hjälp av direktiv.

    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text;
    
  3. Lägg till attributet [Import] i tjänstgränssnittet enligt följande.

    [Import]
    ITextBufferFactoryService textBufferService;
    
  4. När du har fått tjänsten kan du använda någon av dess komponenter.

  5. När du har kompilerat sammansättningen placerar du den i *.. Mappen \Common7\IDE\Components* i Visual Studio-installationen.