Conceitos básicos de serviço
Um serviço é um contrato entre duas VSPackages. Um VSPackage fornece um conjunto específico de interfaces para outro VSPackage consumir. Visual Studioo próprio é uma coleção de VSPackages que fornece serviços a outros VSPackages.
Por exemplo, você pode usar o serviço de SVsActivityLog para obter uma interface IVsActivityLog, que você pode usar para gravar no log de atividade. Para obter mais informações, consulte Como: usar o Log de atividade.
Os serviços não têm nenhum recurso de descoberta. Portanto, você deve conhecer o identificador de serviço (SID) de um serviço que você deseja consumir, e você deve saber quais interfaces ele oferece. A documentação de referência para o serviço fornece essas informações.
Os VSPackages que fornecem serviços são chamados de provedores de serviços.
Serviços fornecidos a outros VSPackages são chamados de serviços globais.
Serviços que estão disponíveis somente para o VSPackage que implementa-las ou a qualquer objeto que cria, são chamados de serviços locais.
Os serviços são carregados sob demanda, ou seja, o provedor de serviços é carregado quando o serviço fornece é solicitado pelo outro VSPackage.
Para oferecer suporte a carregamento sob demanda, um provedor de serviços registra seus serviços globais com Visual Studio. Para obter mais informações, consulte Registrando serviços.
Depois de obter um serviço, use QueryInterface (código não gerenciado) ou a projeção (código gerenciado) para obter a interface desejada, por exemplo:
TryCast(GetService(GetType(SVsActivityLog)), IVsActivityLog)
GetService(typeof(SVsActivityLog)) as IVsActivityLog;
Código gerenciado se refere a um serviço por seu tipo, ao passo que o código não gerenciado se refere a um serviço por seu GUID.
Quando Visual Studio cargas um VSPackage, ele passa um provedor de serviços para o VSPackage para fornecer ao acesso de VSPackage global Services. Isso é conhecido como "Localizando" o VSPackage.
Os VSPackages podem ser provedores de serviços para os objetos criados por eles. Por exemplo, um formulário pode enviar uma solicitação para um serviço de cor com o quadro, que pode passar a solicitação para Visual Studio.
Os objetos gerenciados que estão profundamente aninhados ou não localizados, podem chamar GetGlobalService para acesso direto aos serviços globais. Para obter mais informações, consulte Como: usar GetGlobalService.
Consulte também
Referência
Conversões cast e conversões de tipo (Guia de Programação em C#)