Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du behöver ofta skaffa Visual Studio-tjänster för att få åtkomst till olika funktioner. I allmänhet tillhandahåller en Visual Studio-tjänst ett eller flera gränssnitt som du kan använda. Du kan få de flesta tjänster från en VSPackage.
Alla VSPackage som härleds från Package och som har placerats korrekt kan be om alla globala tjänster.
Package Eftersom klassen implementerar IServiceProviderär alla VSPackage som härleds från Package också en tjänstleverantör.
När Visual Studio läser in en Packageskickar den ett IServiceProvider objekt till SetSite -metoden under initieringen. Detta kallas att placera VSPackage. Klassen Package omsluter den här tjänstleverantören och tillhandahåller GetService metoden för att hämta tjänster.
Hämta en tjänst från ett initialiserat VSPackage
Varje Visual Studio-tillägg börjar med ett VSIX-distributionsprojekt som innehåller tilläggstillgångarna. Skapa ett Visual Studio VSIX-projekt med namnet
GetServiceExtension. Du hittar VSIX-projektmallen i dialogrutan Nytt projekt genom att söka efter "vsix".Lägg nu till en anpassad kommandoobjektmall med namnet GetServiceCommand. I dialogrutan Lägg till nytt objekt går du till Visual C#>Extensibility och väljer Anpassat kommando. I fältet Namn längst ned i fönstret ändrar du kommandofilnamnet till GetServiceCommand.cs. Mer information om hur du skapar ett anpassat kommando finns i Skapa ett tillägg med ett menykommando
I GetServiceCommand.cs tar du bort metodens
MenuItemCommandbrödtext och lägger till följande kod:IVsActivityLog activityLog = ServiceProvider.GetService(typeof(SVsActivityLog)) as IVsActivityLog; if (activityLog == null) return; System.Windows.Forms.MessageBox.Show("Found the activity log service.");Den här koden hämtar en SVsActivityLog-tjänst och omvandlar den till ett IVsActivityLog gränssnitt som kan användas för att skriva till aktivitetsloggen. Ett exempel finns i Så här: Använd aktivitetsloggen.
Skapa projektet och börja felsöka. Experimentella instansen visas.
På menyn Verktyg i den experimentella instansen hittar du knappen Invoke GetServiceCommand. När du klickar på den här knappen bör du se en meddelanderuta med texten Hittade aktivitetsloggtjänsten.
Hämta en tjänst från ett verktygsfönster eller kontrollcontainer
Ibland kan du behöva hämta en tjänst från ett verktygsfönster eller en kontrollcontainer som inte har placerats på plats, eller så har den placerats med en tjänstleverantör som inte känner till den tjänst du vill ha. Du kanske till exempel vill skriva till aktivitetsloggen inifrån en kontroll.
Den statiska GetGlobalService-metoden förlitar sig på en cachelagrad tjänsteleverantör som initieras första gången någon VSPackage som härleds från Package placeras.
Eftersom VSPackage-konstruktorn anropas innan VSPackage finns på plats är globala tjänster vanligtvis inte tillgängliga från VSPackage-konstruktorn. Se Anvisningar: Felsöka tjänster för en lösning.
Här är ett exempel på hur du hämtar en tjänst i ett verktygsfönster eller något annat icke-VSPackage-element.
IVsActivityLog log = Package.GetGlobalService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;
Hämta en tjänst från DTE-objektet
Du kan också hämta tjänster från DTEClass objektet. Du måste dock hämta DTE-objektet som en tjänst från en VSPackage eller genom att anropa den statiska GetGlobalService metoden.
DTE-objektet implementerar IServiceProvider, som du kan använda för att fråga efter en tjänst med hjälp av GetService.
Så här hämtar du en tjänst från DTE-objektet.
// 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.");
}
}