Sdílet prostřednictvím


Získání služby

Pro přístup k různým funkcím často potřebujete získat služby sady Visual Studio. Obecně platí, že služba sady Visual Studio poskytuje jedno nebo více rozhraní, která můžete použít. Většinu služeb můžete získat z balíčku VSPackage.

Jakýkoli balíček VSPackage, který je odvozen od Package a který byl správně siteděný, může požádat o jakoukoli globální službu. Vzhledem k tomu, že Package třída implementuje IServiceProvider, všechny VSPackage, které jsou odvozeny od Package , je také poskytovatelem služeb.

Při načtení sady PackageVisual Studio předá IServiceProvider objekt metodě SetSite během inicializace. Tomu se říká přisouzení balíčku VSPackage. Třída Package zabalí tohoto poskytovatele služeb a poskytuje metodu GetService pro získání služeb.

Získání služby z inicializovaného balíčku VSPackage

  1. Každé rozšíření sady Visual Studio začíná projektem nasazení VSIX, který bude obsahovat prostředky rozšíření. Vytvořte projekt Visual Studio VSIX s názvem GetServiceExtension. Šablonu projektu VSIX najdete v dialogovém okně Nový projekt vyhledáním "vsix".

  2. Teď přidejte vlastní šablonu položky příkazu s názvem GetServiceCommand. V dialogovém okně Přidat novou položku přejděte do visual C#>Rozšiřitelnost a vyberte Vlastní příkaz. V poli Název v dolní části okna změňte název souboru příkazu na GetServiceCommand.cs. Další informace o tom, jak vytvořit vlastní příkaz, vytvořte rozšíření pomocí příkazu nabídky.

  3. V GetServiceCommand.cs odeberte tělo MenuItemCommand metody a přidejte následující kód:

    IVsActivityLog activityLog = ServiceProvider.GetService(typeof(SVsActivityLog)) as IVsActivityLog;
    if (activityLog == null) return;
    System.Windows.Forms.MessageBox.Show("Found the activity log service.");
    
    

    Tento kód získá službu SVsActivityLog a přetypuje ji do IVsActivityLog rozhraní, které lze použít k zápisu do protokolu aktivit. Příklad najdete v tématu Postupy: Použití protokolu aktivit.

  4. Sestavte projekt a spusťte ladění. Zobrazí se experimentální instance.

  5. V nabídce Nástroje experimentální instance vyhledejte tlačítko Invoke GetServiceCommand . Když kliknete na toto tlačítko, mělo by se zobrazit okno se zprávou, že se našla služba protokolu aktivit.

Získání služby z okna nástroje nebo kontejneru ovládacího prvku

Někdy může být potřeba získat službu z okna nástroje nebo řídicího kontejneru, který nebyl sited, nebo jinak byl sited s poskytovatelem služeb, který neví o požadované službě. Můžete například chtít zapisovat do protokolu aktivit z ovládacího prvku.

Statická GetGlobalService metoda spoléhá na zprostředkovatele služeb uloženého v mezipaměti, který se inicializuje při prvním inicializaci jakéhokoli balíčku VSPackage odvozeného z Package lokality.

Vzhledem k tomu, že konstruktor VSPackage je volána před sited VSPackage, globální služby jsou obvykle nedostupné z konstruktoru VSPackage. Viz Postupy: Řešení potíží se službami pro alternativní řešení.

Tady je příklad způsobu, jak získat službu v okně nástroje nebo jiném prvku než VSPackage.

IVsActivityLog log = Package.GetGlobalService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;

Získání služby z objektu DTE

Služby můžete získat také z DTEClass objektu. Objekt DTE však musíte získat jako službu z balíčku VSPackage nebo voláním statické GetGlobalService metody.

Objekt DTE implementuje IServiceProvider, který můžete použít k dotazování na službu pomocí GetService.

Tady je postup, jak získat službu z objektu DTE.

// Start with the DTE object, for example: 
// using EnvDTE;
// DTE dte = (DTE)GetService(typeof(DTE));

ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)dte);
if (sp != null)
{
    IVsActivityLog log = sp.GetService(typeof(SVsActivityLog)) as IVsActivityLog;
    if (log != null)
    {
        System.Windows.Forms.MessageBox.Show("Found the activity log service.");
    }
}