ServiceProvider Class

Provides a unified service provider for managed VSPackages.

This API is not CLS-compliant. 

Inheritance Hierarchy


Namespace:  Microsoft.VisualStudio.Shell
Assembly:  Microsoft.VisualStudio.Shell.10.0 (in Microsoft.VisualStudio.Shell.10.0.dll)


<ComVisibleAttribute(True)> _
<CLSCompliantAttribute(False)> _
Public NotInheritable Class ServiceProvider _
    Implements IServiceProvider, IDisposable, IObjectWithSite
public sealed class ServiceProvider : IServiceProvider, 
    IDisposable, IObjectWithSite
public ref class ServiceProvider sealed : IServiceProvider, 
    IDisposable, IObjectWithSite
type ServiceProvider =  
        interface IServiceProvider
        interface IDisposable
        interface IObjectWithSite
public final class ServiceProvider implements IServiceProvider, IDisposable, IObjectWithSite

The ServiceProvider type exposes the following members.


  Name Description
Public method ServiceProvider(IServiceProvider) Initializes a instance with an existing IServiceProvider interface.
Public method ServiceProvider(IServiceProvider, Boolean) Initializes a new instance of the ServiceProvider class with an existing IServiceProvider object and optionally passes all requests to the underlying service provider.



  Name Description
Public propertyStatic member GlobalProvider Gets the global service provider for the calling thread.



  Name Description
Public methodStatic member CreateFromSetSite Create a new ServiceProvider for the given site.
Public method Dispose Releases the resources used by the ServiceProvider object.
Public method Equals Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Public method GetService(Guid) Gets the specified service from the unmanaged service provider.
Public method GetService(Type) Gets type-based services from the unmanaged service provider.
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method ToString Returns a string that represents the current object. (Inherited from Object.)


Explicit Interface Implementations

  Name Description
Explicit interface implemetationPrivate method IObjectWithSite.GetSite Gets the current site object to resolve services.
Explicit interface implemetationPrivate method IObjectWithSite.SetSite Sets the site object to resolve services.



This class provides a unified service provider for managed VSPackages. It implements IServiceProvider and takes an instance of IServiceProvider as a constructor argument.

This class supports both GUID and type based lookups. It also checks for common native implementation pitfalls, such as objects that do not implement the IUnknown interface or that require a specific IID along with a matching SID.

This class also provides debugging support in the debug version of the .NET Framework (also known as a "checked" version). Setting the tracing switch TRACESERVICE to TraceVerbose causes all service requests to be output to the debug listener.

In addition, ServiceProvider tests for certain conditions when forwarding a service request to native code. Managed code requires the IUnknown interface when resolving services, but most native queries do not. If an unmanaged service cannot be obtained through an IID of IUnknown, an additional call is made in checked builds with the SID used in place of the IID. ServiceProvider raises an assert if the SID query succeeds.


Returning the result of a successful SID query in a checked build causes a different behavior in the debug and retail builds of the VSPackage, so an assert is raised instead.

In addition to translating service requests to the COM service provider, the ServiceProvider class offers the following non-replaceable services:


Provides access to the native COM service provider object. The service provider object can be used to directly query for other interfaces.


Provides a way to replace the COM service provider. In many places within Visual Studio an object is first given one site, and later another, more localized site. The more localized site can be passed through to the service provider's IObjectWithSite implementation to create a single point of contact for services. (The SetSite method is ignored if the site does not implement IServiceProvider.)

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also


Microsoft.VisualStudio.Shell Namespace