Service EssentialsService Essentials

Un service est un contrat entre deux VSPackages.A service is a contract between two VSPackages. Un VSPackage fournit un ensemble spécifique d’interfaces pour un autre VSPackage à consommer.One VSPackage provides a specific set of interfaces for another VSPackage to consume. Visual StudioVisual Studio est une collection de VSPackages qui fournit des services aux autres packages VS à elle-même. is itself a collection of VSPackages that provides services to other VSPackages.

Par exemple, vous pouvez utiliser le service SVsActivityLog pour obtenir une interface IVsActivityLog, que vous pouvez utiliser pour écrire dans le journal d’activité.For example, you can use the SVsActivityLog service to obtain an IVsActivityLog interface, which you can use to write to the activity log. Pour plus d’informations, consultez Comment : utiliser le journal d’activité.For more information, see How to: Use the Activity Log.

Visual StudioVisual Studio fournit également des services intégrés qui ne sont pas enregistrés. also provides some built-in services which are not registered. Les VSPackages peuvent remplacer intégrés ou d’autres services en fournissant un service de remplacement.VSPackages can replace built-in or other services by providing a service override. Remplacement d’un seul service est autorisée pour n’importe quel service.Only one service override is permitted for any service.

Les services n’ont aucune fonctionnalité de découverte.Services have no discoverability. Par conséquent, vous devez connaître l’identificateur de service (SID) d’un service que vous souhaitez utiliser, et vous devez connaître les interfaces qu’il fournit.Therefore, you must know the service identifier (SID) of a service that you want to consume, and you must know which interfaces it provides. La documentation de référence pour le service fournit ces informations.The reference documentation for the service provides this information.

  • Les VSPackages qui fournissent des services sont appelés fournisseurs de services.VSPackages that provide services are called service providers.

  • Les services qui sont fournis pour les autres packages VS sont appelés services globaux.Services that are provided to other VSPackages are called global services.

  • Services qui sont disponibles uniquement pour le VSPackage qui implémente les, ou à n’importe quel objet, qu'il crée, sont appelés des services locaux.Services that are available only to the VSPackage that implements them, or to any object it creates, are called local services.

  • Les services qui remplacent les services intégrés ou des services fournis par d’autres packages, sont appelés des remplacements de service.Services that replace built-in services or services provided by other packages, are called service overrides.

  • Des services ou des remplacements de service, sont chargées à la demande, autrement dit, le fournisseur de services est chargé quand le service à que fournir est demandé par un autre VSPackage.Services, or service overrides, are loaded on demand, that is, the service provider is loaded when the service it provides is requested by another VSPackage.

  • Pour prendre en charge le chargement de la demande, un fournisseur de services inscrit ses services globaux avec Visual StudioVisual Studio.To support on-demand loading, a service provider registers its global services with Visual StudioVisual Studio. Pour plus d’informations, consultez Comment : fournir un Service.For more information, see How to: Provide a Service.

  • Après avoir obtenu un service, utilisez QueryInterface (code non managé) ou effectuer un cast (code managé) pour obtenir l’interface de votre choix, par exemple :After you obtain a service, use QueryInterface (unmanaged code) or casting (managed code) to get the desired interface, for example:

    TryCast(GetService(GetType(SVsActivityLog)), IVsActivityLog)  
    
    GetService(typeof(SVsActivityLog)) as IVsActivityLog;  
    
  • Le code managé fait référence à un service par son type, alors que le code non managé fait référence à un service par son GUID.Managed code refers to a service by its type, whereas unmanaged code refers to a service by its GUID.

  • Lorsque Visual StudioVisual Studio charge un VSPackage, il passe un fournisseur de services pour le VSPackage pour donner l’accès VSPackage aux services globaux.When Visual StudioVisual Studio loads a VSPackage, it passes a service provider to the VSPackage to give the VSPackage access to global services. Cela est appelé « emplacement » le VSPackage.This is referred to as "siting" the VSPackage.

  • Les VSPackages peuvent être des fournisseurs de services pour les objets qu’ils créent.VSPackages can be service providers for the objects they create. Par exemple, un formulaire peut envoyer une demande pour un service de couleur à son cadre, ce qui peut transmettre la requête Visual StudioVisual Studio.For example, a form might send a request for a color service to its frame, which might pass the request to Visual StudioVisual Studio.

  • Les objets managés qui sont profondément imbriquées ou pas dans le site, peuvent appeler GetGlobalService pour accéder directement aux services globaux.Managed objects that are deeply nested, or not sited at all, may call GetGlobalService for direct access to global services.

Utilisation d’un GetGlobalServiceUse GetGlobalService

Parfois, vous devrez peut-être obtenir un service à partir d’une fenêtre outil ou le contrôle conteneur qui n’a pas été installé, ou bien a été installé avec un fournisseur de services qui ne connaît pas sur le service souhaité.Sometimes you may need to get a service from a tool window or control container that has not been sited, or else has been sited with a service provider that does not know about the service you want. Par exemple, vous souhaiterez écrire dans le journal d’activité à partir d’un contrôle.For example, you might want to write to the activity log from within a control. Pour plus d’informations sur ces scénarios et d’autres, consultez Comment : résoudre les problèmes des Services.For more information about these and other scenarios, see How to: Troubleshoot Services.

Vous pouvez obtenir la plupart des services de Visual Studio en appelant la méthode statique GetGlobalService (méthode).You can get most Visual Studio services by calling the static GetGlobalService method.

GetGlobalService s’appuie sur un service de mise en cache fournisseur qui est initialisé à la première fois qu’un VSPackage dérivé de Package est placé.GetGlobalService relies on a cached service provider that is initialized the first time any VSPackage derived from Package is sited. Vous devez vous assurer que cette condition est remplie, ou bien être préparée pour un service de type null.You must guarantee that this condition is met, or else be prepared for a null service.

Heureusement, GetGlobalService fonctionne correctement la plupart du temps.Fortunately, GetGlobalService works correctly most of the time.

  • Si un VSPackage fournit un service connu uniquement par un autre VSPackage, le VSPackage demandant le service est placé avant le VSPackage en fournissant que le service est chargé.If a VSPackage provides a service known only to another VSPackage, the VSPackage requesting the service is sited before the VSPackage providing the service is loaded.

  • Si une fenêtre outil est créée par un VSPackage, le VSPackage est placé avant la création de la fenêtre outil.If a tool window is created by a VSPackage, the VSPackage is sited before the tool window is created.

  • Si un conteneur de contrôle est hébergé par une fenêtre outil créée par un VSPackage, le VSPackage est placé avant la création du conteneur de contrôle.If a control container is hosted by a tool window created by a VSPackage, the VSPackage is sited before the control container is created.

Pour obtenir un service à partir d’un conteneur de contrôle ou de la fenêtre outilTo get a service from within a tool window or control container

  • Insérez ce code dans le constructeur, une fenêtre outil ou un conteneur de contrôle :Insert this code in the constructor, tool window, or control container:

    IVsActivityLog log = Package.GetGlobalService(typeof(SVsActivityLog)) as IVsActivityLog;
        if (log == null) return;
    
    Dim log As IVsActivityLog = TryCast(Package.GetGlobalService(GetType(SVsActivityLog)), IVsActivityLog)
    If log Is Nothing Then
        Return
    End If
    

    Ce code obtient un service SVsActivityLog et il effectue un cast en interface IVsActivityLog, qui peut être utilisée pour écrire dans le journal d’activité.This code obtains an SVsActivityLog service and casts it to an IVsActivityLog interface, which can be used to write to the activity log. Pour obtenir un exemple, consultez Comment : utiliser le journal d’activité.For an example, see How to: Use the Activity Log.

Voir aussiSee Also

Liste des Services disponibles List of Available Services
À l’aide et fournir des Services Using and Providing Services
Cast et conversions de types Casting and Type Conversions
CastCasting