Sdílet prostřednictvím


Komponenty rozšíření „VisualStudio.Extensibility“

Rozšíření využívající VisualStudio.Extensibility má obvykle několik komponent, které spolupracují a také se sadou Visual Studio.

Instance rozšíření

Rozšíření musí mít třídu, která je odvozena z Extension. Příklad implementace, viz MarkdownLinter.

Instance třídy Extension je výchozím bodem pro spuštění rozšíření. Tato instance obsahuje nezbytné metody pro Visual Studio k dotazování služeb poskytovaných rozšířením. Poskytuje také virtuální metody rozšíření pro poskytování lokalizovaných prostředků a místních služeb vlastněných rozšířením, které se mají sdílet mezi komponentami rozšíření.

Konfigurace třídy Extension obsahuje také metadata rozšíření, která se zobrazují v okně spravovat rozšíření sady Visual Studio a u publikovaných rozšíření na Visual Studio Marketplace.

[VisualStudioContribution]
public class MarkdownLinterExtension : Extension
{
    /// <inheritdoc/>
    public override ExtensionConfiguration ExtensionConfiguration => new()
    {
        Metadata = new(
                id: "MarkdownLinter.0cf26ba2-edd5-4419-8646-a55d0a83f7d8",
                version: this.ExtensionAssemblyVersion,
                publisherName: "Microsoft",
                displayName: "Markdown Linter Sample Extension",
                description: "Sample markdown linter extension"),
    };
    ...

Pro vývojáře rozšíření, kteří jsou obeznámeni s existujícími rozhraními API VSSDK, se k vygenerování souboru Metadata použije ExtensionConfiguration obsažené v .vsixmanifest. Třída Extension je také podobná třídě AsyncPackage, která se používá v modelu rozšiřitelnosti sady VSSDK.

Objekt VisualStudioExtensibility

Objekt VisualStudioExtensibility funguje jako vstupní bod pro funkce rozšiřitelnosti vystavené sadou Visual Studio. Tato třída má různé rozšiřující metody a vlastnosti, které umožňují rychle procházet dostupné funkce v sadě SDK rozšiřitelnosti. Dostupné metody najdete v dokumentaci k rozhraní API.

Části rozšíření

Pro funkce, kde rozšíření přidávají komponenty do Visual Studio, jako jsou příkazy a posluchače editoru, budou rozšíření využívat klasifikované třídy. Proces sestavení vygeneruje správná metadata, aby se zajistilo, že visual Studio může tyto komponenty zjistit.

Pro funkce, ve kterých rozšíření přidává komponenty do Visual Studio, jako jsou příkazy, editorové posluchače, okna nástrojů atd., rozšíření využívají třídy označené atributem VisualStudioContribution. Proces sestavení vygeneruje správná metadata, aby se zajistilo, že visual Studio dokáže tyto komponenty zjistit.

V současné době sada SDK podporuje omezenou sadu komponent, které lze přispívat.

Instance pro tyto třídy se vytvářejí jako součást architektury rozšiřitelnosti poskytované sadou SDK pomocí knihovny injektáže závislostí a konstruktory lze použít k načtení instancí služeb poskytovaných sadou SDK nebo rozšířením samotným pro sdílení stavu mezi komponentami.

Životnost rozšiřujících dílů

Životnost každé části je spravována příslušnou komponentou, která tyto části načítá v rámci procesu integrovaného vývojového prostředí sady Visual Studio.

  • Obslužné rutiny příkazů se inicializují při aktivaci odpovídající sady příkazů, což může být během prvního spuštění příkazu. Po aktivaci by obslužné rutiny příkazů měly být uvolněny pouze při vypnutí integrovaného vývojového prostředí (IDE).

  • Podobně se naslouchací procesy událostí textového zobrazení inicializují, když se do integrovaného vývojového prostředí načte první textové zobrazení odpovídající zadanému typu obsahu. V současné době jsou tyto naslouchací programy aktivní, dokud se integrované vývojové prostředí nevypne, ale toto chování se může změnit v budoucnu.

Obecně platí, že pro složitější rozšíření doporučujeme, aby rozšíření poskytovala místní služby, které je možné importovat do konstruktoru a používat ke sdílení stavu napříč částmi a mezi instancemi stejné části. Tento postup zajišťuje, aby stav rozšíření nebyl ovlivněn změnami životnosti částí rozšíření.

Služby poskytované sadou SDK pro injektování a služby místního rozšíření

Sada VisualStudio.Extensibility SDK využívá injektáž závislostí, aby komponenty mohly ingestovat jak integrované služby, tak i služby nabízené rozšířením místně, aby se sdílely mezi různými komponentami. Další podrobnosti o službách nabízených sadou SDK, o dobách životnosti služeb a příkladech použití injektáže závislostí naleznete v části o injektáži závislostí .

Pro příklad toho, jak se používají místní služby, viz rozšíření MarkdownLinter.

Kontext klienta

Vzhledem k tomu, že všechna rozšíření v nové sadě SDK běží mimo hlavní proces, zavádíme koncept kontextu klienta pro různé části rozšíření, které reprezentují stav IDE v okamžiku, kdy je událost nebo metoda vyvolána. Tento kontext představuje instance IClientContext v sadě SDK a předává se různým operacím, jako jsou obslužné rutiny spouštění příkazů. Sada SDK poskytuje rozšiřující metody pro IClientContext, které lze využít k načtení objektů z kontextu. Rozšíření mohou například získat aktivní textové zobrazení nebo identifikátor URI pro vybrané položky v době provádění příkazu s využitím instance IClientContext.

Některé komponenty, jako jsou příkazy, vám také umožňují deklarovat, které kontexty vás zajímají. Tím se optimalizuje množství dat přenášených v každém vzdáleném spuštění, protože kontext klienta může být v budoucnu velký. V počáteční verzi Preview jsou k dispozici pouze dva dostupné kontexty, Shell a Editora oba jsou ve výchozím nastavení zahrnuty při deklarování příkazu pomocí CommandAttribute.