How to get services from the VS DTE (using System.IServiceProvider)

Note: this entry has moved.

VS is heavily based on a component model and container hierarchy of services (yes, that's most probably where System.ComponentModel came from...). Even though there's no comprehensive documentation of all services available and from which contexts, every now and then I find the need to ask for services, but all I've got at hand is either a EnvDTE.ProjectItem or Project, or just the DTE. So, how do you use the familiar System.IServiceProvider to ask for services?

The trick is to get the latest VS SDK, add a reference to Microsoft.VisualStudio.OLE.Interop.dll and Microsoft.VisualStudio.Shell.dll and use the following simple code:

EnvDTE.Project project; // this is what you have at hand somehow.
 
IServiceProvider serviceProvider = new ServiceProvider(project.DTE as
    Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
 
DynamicTypeService typeService = (DynamicTypeService)
    serviceProvider.GetService(typeof(DynamicTypeService));

The ServiceProvider class in the Shell assembly provides the adapter you need to ask the DTE for services.

Published 07 January 2006 02:39 AM by Daniel Cazzulino
Filed under: ,

Comments

No Comments

Search

Go

This Blog

News

     

      Microsoft MVP Profile

Syndication