Architektura spravované rozšiřitelnosti v editoru

Editor je sestaven pomocí komponent MEF (Managed Extensibility Framework). Můžete vytvořit vlastní komponenty MEF pro rozšíření editoru a váš kód může využívat i součásti editoru.

MEF je knihovna .NET, která umožňuje přidávat a upravovat funkce aplikace nebo komponenty, které se řídí programovacím modelem MEF. Editor sady Visual Studio může poskytovat i využívat součásti MEF.

Soubor MEF je obsažen v sestavení .NET Framework verze 4 System.ComponentModel.Composition.dll .

Další informace o MEF naleznete v tématu Rozhraní MEF (Managed Extensibility Framework) (MEF).

Součásti a kontejnery složení

Součást komponenty je třída nebo člen třídy, která může provést jednu (nebo obě) z těchto věcí:

  • Využívání jiné komponenty

  • Spotřebovávat jinou komponentou

    Představte si například nákupní aplikaci, která má součást pro zadávání objednávek, která závisí na datech dostupnosti produktu poskytovaných komponentou skladového skladu. V termínech MEF může část inventáře exportovat data o dostupnosti produktů a část zadávání objednávky může importovat data. Položka objednávky a část zásob nemusí o sobě vědět; kontejner složení (poskytovaný hostitelskou aplikací) zodpovídá za údržbu sady exportů a řešení exportů a importů.

    Kontejner složení , CompositionContainerje obvykle vlastněna hostitelem. Kontejner složení udržuje katalog exportovaných součástí.

Export a import součástí součásti

Můžete exportovat libovolnou funkci, pokud je implementována jako veřejná třída nebo veřejný člen třídy (vlastnost nebo metoda). Součást součásti není nutné odvodit z ComposablePart. Místo toho musíte přidat ExportAttribute atribut do třídy nebo člena třídy, který chcete exportovat. Tento atribut určuje kontrakt , podle kterého může jiná součást součásti importovat vaše funkce.

Smlouva o exportu

Definuje ExportAttribute entitu (třídu, rozhraní nebo strukturu), která se exportuje. Atribut exportu obvykle přebírá parametr, který určuje typ exportu.

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

Ve výchozím nastavení atribut definuje kontrakt, ExportAttribute který je typem exportovací třídy.

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

V příkladu je výchozí [Export] atribut ekvivalentní [Export(typeof(TestAdornmentLayerDefinition))].

Můžete také exportovat vlastnost nebo metodu, jak je znázorněno v následujícím příkladu.

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

Import exportu MEF

Pokud chcete použít export MEF, musíte znát kontrakt (obvykle typ), podle kterého byl exportován, a přidat ImportAttribute atribut, který má tuto hodnotu. Ve výchozím nastavení má atribut import jeden parametr, což je typ třídy, kterou upravuje. Následující řádky kódu importuje IClassificationTypeRegistryService typ.

[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;

Řešení potíží s importem a exportem: Přístup k protokolu chyb MEF Composition

Pokud se pokusíte naimportovat něco, co v aktuální instalaci VS neexistuje nebo pokud import nebo export nesprávně vytvoříte, může dojít k problémům. Primárním způsobem, jak tyto problémy najít a vyřešit, je odkazovat na protokol chyb složení spravovaného rozšíření (MEF) uložený v %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.

Získání funkcí editoru z části součásti MEF

Pokud je váš existující kód součástí součásti MEF, můžete použít metadata MEF ke zpracování částí součástí editoru.

Používání funkcí editoru z části součásti MEF

  1. Přidejte odkazy na System.Composition.ComponentModel.dll, která je v globální mezipaměti sestavení (GAC) a do sestavení editoru.

  2. Přidejte příslušné direktivy using.

    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text;
    
  3. [Import] Přidejte atribut do rozhraní služby následujícím způsobem.

    [Import]
    ITextBufferFactoryService textBufferService;
    
  4. Jakmile službu získáte, můžete využívat některou z jejích komponent.

  5. Po kompilaci sestavení ho vložte do *.. Složka \Common7\IDE\Components* instalace sady Visual Studio.