Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Muitas vezes, você precisa obter serviços do Visual Studio para acessar recursos diferentes. Em geral, um serviço do Visual Studio fornece uma ou mais interfaces que você pode usar. Você pode obter a maioria dos serviços de um VSPackage.
Qualquer VSPackage que deriva de Package e que foi corretamente localizado pode solicitar qualquer serviço global. Como a classe Package implementa IServiceProvider, qualquer VSPackage que deriva de Package também é um fornecedor de serviços.
Quando o Visual Studio carrega um Package, passa um objeto IServiceProvider para o método SetSite durante a inicialização. Isso é chamado de instalação do VSPackage. A Package classe encapsula esse provedor de serviços e fornece o GetService método para obter serviços.
Obtendo um serviço de um VSPackage já inicializado
Cada extensão do Visual Studio começa com um projeto de implantação VSIX, que conterá os ativos de extensão. Crie um projeto VSIX do Visual Studio chamado
GetServiceExtension. Você pode encontrar o modelo de projeto VSIX na caixa de diálogo New Project procurando por "vsix".Agora adicione um modelo de item de comando personalizado chamado GetServiceCommand. Na caixa de diálogo Adicionar Novo Item , vá para Visual C#>Extensibility e selecione Comando Personalizado. No campo Nome na parte inferior da janela, altere o nome do arquivo de comando para GetServiceCommand.cs. Para obter mais informações sobre como criar um comando personalizado, Criar uma extensão com um comando de menu
No GetServiceCommand.cs, remova o
MenuItemCommandcorpo do método e adicione o seguinte código:IVsActivityLog activityLog = ServiceProvider.GetService(typeof(SVsActivityLog)) as IVsActivityLog; if (activityLog == null) return; System.Windows.Forms.MessageBox.Show("Found the activity log service.");Este código obtém um serviço SVsActivityLog e transforma-o numa interface IVsActivityLog, que pode ser usada para escrever no registo de atividades. Para obter um exemplo, consulte Como usar o log de atividades.
Construa o projeto e inicie a depuração. A instância experimental aparece.
No menu Ferramentas da instância experimental, localize o botão Invoke GetServiceCommand . Ao clicar nesse botão, você verá uma caixa de mensagem que diz Encontrado o serviço de registro de atividades.
Obter um serviço a partir de uma janela de ferramentas ou um recipiente de controle
Às vezes, pode ser necessário obter um serviço de uma janela de ferramenta ou contêiner de controle que não foi configurado, ou que foi configurado com um prestador de serviços que desconhece o serviço pretendido. Por exemplo, talvez você queira gravar no log de atividades de dentro de um controle.
O método estático GetGlobalService depende de um provedor de serviços em cache que é inicializado na primeira vez que qualquer VSPackage derivado de Package é localizado.
Como o construtor do VSPackage é chamado antes de o VSPackage estar integrado, os serviços globais normalmente não estão disponíveis no interior do construtor do VSPackage. Consulte Como solucionar problemas de serviços para obter uma solução alternativa.
Aqui está um exemplo da maneira de obter um serviço em uma janela de ferramenta ou outro elemento não-VSPackage.
IVsActivityLog log = Package.GetGlobalService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;
Obtendo um serviço a partir do objeto DTE
Você também pode obter serviços do DTEClass objeto. No entanto, você deve obter o objeto DTE como serviço de um pacote VS ou chamando o método estático GetGlobalService.
O objeto DTE implementa IServiceProvider, que você pode usar para consultar um serviço usando GetService.
Veja como obter um serviço do objeto 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.");
}
}