Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een service is een contract tussen twee VSPackages. Eén VSPackage biedt een specifieke set interfaces die door een andere VSPackage kunnen worden gebruikt. Visual Studio is zelf een verzameling VSPackages die services biedt aan andere VSPackages.
U kunt bijvoorbeeld de SVsActivityLog-service gebruiken om een IVsActivityLog-interface te verkrijgen, die u kunt gebruiken om naar het activiteitenlogboek te schrijven. Zie Instructies voor meer informatie : Het activiteitenlogboek gebruiken.
Visual Studio biedt ook enkele ingebouwde services die niet zijn geregistreerd. VSPackages kan ingebouwde of andere services vervangen door een serviceoverschrijving te bieden. Er is slechts één serviceoverschrijving toegestaan voor elke service.
Services hebben geen detectiemogelijkheden. Daarom moet u de service-id (SID) kennen van een service die u wilt gebruiken en moet u weten welke interfaces het biedt. De referentiedocumentatie voor de service biedt deze informatie.
VSPackages die services leveren, worden serviceproviders genoemd.
Services die aan andere VSPackages worden geleverd, worden globale services genoemd.
Services die alleen beschikbaar zijn voor de VSPackage die ze implementeert, of voor een object dat wordt gemaakt, worden lokale services genoemd.
Diensten die ingebouwde services of services geleverd door andere pakketten vervangen, worden overschrijvende services genoemd.
"Services, ofwel serviceoverschrijvingen, worden op aanvraag geladen, dat wil zeggen, de serviceprovider wordt geladen wanneer de service wordt aangevraagd door een andere VSPackage."
Om het laden op aanvraag te ondersteunen, registreert een serviceprovider de globale services bij Visual Studio. Zie How to: Provide a Service(s) voor meer informatie.
Nadat u een service hebt verkregen, gebruikt u QueryInterface (niet-beheerde code) of casten (beheerde code) om de gewenste interface op te halen, bijvoorbeeld:
Beheerde code verwijst naar een service op basis van het type, terwijl onbeheerde code verwijst naar een service door de GUID.
Wanneer Visual Studio een VSPackage laadt, wordt een serviceprovider doorgegeven aan de VSPackage om de VSPackage toegang te geven tot globale services. Dit wordt "siting" van de VSPackage genoemd.
VSPackages kunnen serviceproviders zijn voor de objecten die ze maken. Een formulier kan bijvoorbeeld een aanvraag voor een kleurservice naar het frame verzenden, waardoor de aanvraag kan worden doorgegeven aan Visual Studio.
Beheerde objecten die diep genest zijn of helemaal niet zijn gesitueerd, kunnen GetGlobalService aanroepen voor directe toegang tot globale services.
GetGlobalService gebruiken
Soms moet u mogelijk een service ophalen uit een hulpprogrammavenster of beheercontainer die niet is geplaatst, of anders wel is geplaatst, maar met een serviceprovider die niet op de hoogte is van de service die u wilt gebruiken. U kunt bijvoorbeeld vanuit een besturingselement naar het activiteitenlogboek schrijven. Zie How to: Troubleshoot Services (Problemen met services oplossen) voor meer informatie over deze en andere scenario's.
U kunt de meeste Visual Studio-services verkrijgen door de statische GetGlobalService methode aan te roepen.
GetGlobalService is afhankelijk van een serviceprovider in de cache die voor de eerste keer wordt geïnitialiseerd wanneer een VSPackage dat is afgeleid van Package voor het eerst wordt geplaatst. U moet erop toezien dat aan deze voorwaarde wordt voldaan, anders moet u voorbereid zijn op een niet-functionele service.
Gelukkig werkt dit meestal GetGlobalService correct.
Als een VSPackage alleen een service biedt die alleen bekend is bij een andere VSPackage, wordt de VSPackage die de service aanvraagt, geplaatst voordat de VSPackage die de service levert, wordt geladen.
Als een hulpprogrammavenster wordt gemaakt door een VS-pakket, wordt het VS-pakket gepositioneerd voordat het hulpprogrammavenster wordt gecreëerd.
Als een besturingscontainer wordt gehost door een hulpprogrammavenster dat is gemaakt door een VSPackage, wordt de VSPackage geplaatst voordat de besturingscontainer wordt gemaakt.
Een service ophalen vanuit een hulpprogrammavenster of beheercontainer
Voeg deze code in het constructor-, gereedschapsvenster of besturingselementcontainer in:
IVsActivityLog log = Package.GetGlobalService(typeof(SVsActivityLog)) as IVsActivityLog; if (log == null) return;Deze code verkrijgt een SVsActivityLog-service en cast deze naar een IVsActivityLog-interface, die kan worden gebruikt om naar het activiteitenlogboek te schrijven. Voor een voorbeeld, zie Hoe het activiteitenlogboek te gebruiken.