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
Přidejte odkazy na System.Composition.ComponentModel.dll, která je v globální mezipaměti sestavení (GAC) a do sestavení editoru.
Přidejte příslušné direktivy using.
using System.ComponentModel.Composition; using Microsoft.VisualStudio.Text;
[Import]
Přidejte atribut do rozhraní služby následujícím způsobem.[Import] ITextBufferFactoryService textBufferService;
Jakmile službu získáte, můžete využívat některou z jejích komponent.
Po kompilaci sestavení ho vložte do *.. Složka \Common7\IDE\Components* instalace sady Visual Studio.