Partager via


Comment : résolvez les services

Plusieurs problèmes courants liés à obtenir des services :

  • le service n'est pas enregistré avec Visual Studio.

  • Le service est demandé par le type d'interface et non par le type de service.

  • Le VSPackage qui demande le service n'a pas été localisé.

  • le fournisseur de services incorrect est utilisé.

Si le service demandé ne peut pas être obtenu, l'appel de retour d' GetService null. Vous devez toujours déterminer NULL après avoir demandé un service :

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

pour résoudre un service

  1. Examinez la base de registres pour voir si le service a été correctement inscrit. Pour plus d'informations, consultez Enregistrement des services.

  2. Utilisez le type de service et pas le type d'interface lorsque vous appelez GetService. En demandant un service de Visual Studio, Package extrait le GUID du type. Un service ne sera pas trouvée si les conditions suivantes sont disponibles :

    1. un type d'interface est passé à GetService au lieu du type de service.

    2. Aucun GUID n'est assigné explicitement à l'interface. Par conséquent, le système crée un GUID par défaut d'un objet si nécessaire.

  3. Assurez -vous que le VSPackage qui demande le service était localisé. Visual Studio trouve un VSPackage après l'avoir construit et avant d'appeler Initialize.

    Si du code dans un constructeur d'un VSPackage qui requiert un service, déplacez -le vers la méthode initialize.

  4. Assurez -vous que vous utilisez le fournisseur de services correct.

    Tous les fournisseurs de services sont semblables. Le fournisseur de services que Visual Studio passe à une fenêtre Outil diffère de celle qu'il passe à un VSPackage. le fournisseur de services de fenêtre Outil sait STrackSelection, mais ne sait pas SVsRunningDocumentTable. vous pouvez appeler GetGlobalService pour obtenir un fournisseur de services de VSPackage d'une fenêtre Outil. Pour plus d'informations, consultez Comment : utilisation GetGlobalService.

    Si une fenêtre Outil héberge un contrôle utilisateur ou un autre conteneur de contrôle, le conteneur est situé par le modèle de composant Windows et ne présente pas accès à un service de Visual Studio . vous pouvez appeler GetGlobalService pour obtenir un fournisseur de services de VSPackage d'un conteneur de contrôle. Pour plus d'informations, consultez Comment : utilisation GetGlobalService.

Voir aussi

Concepts

Liste des services disponibles

service Essentials

Autres ressources

services