Partager via


Comment : récupérer le service de projet SharePoint

Vous pouvez accéder au service du projet SharePoint dans les types de solution suivants :

  • Extension du système de projet SharePoint, telle qu'une extension de projet, une extension d'élément de projet ou une définition de type d'élément de projet. Pour plus d'informations sur ces types d'extensions, consultez Extension du système de projet SharePoint.

  • Une extension du nœud Connexions SharePoint dans l'Explorateur de serveurs. Pour plus d'informations sur ces types d'extensions, consultez Extension du nœud Connexions SharePoint dans l'Explorateur de serveurs.

  • Un autre type d'extension Visual Studio, tel qu'un complément ou un VSPackage.

Extraction du service dans les extensions de système de projet

Dans toute extension du système de projet SharePoint, vous pouvez accéder au service du projet à l'aide de la propriété ProjectService d'un objet ISharePointProject.

Il est également possible d'extraire le service du projet en procédant selon les façons suivantes.

Pour extraire le service dans une extension de projet

  1. Dans votre implémentation de l'interface ISharePointProjectExtension, localisez la méthode Initialize.

  2. Utilisez le paramètre projectService pour accéder au service.

    L'exemple de code suivant montre comment utiliser le service du projet pour écrire un message dans la fenêtre Sortie et la fenêtre Liste d'erreurs dans une extension de projet simple.

    <Export(GetType(ISharePointProjectExtension))> _
    Friend Class GetServiceInProject
        Implements ISharePointProjectExtension
    
        Private Sub Initialize(ByVal projectService As ISharePointProjectService) _
            Implements ISharePointProjectExtension.Initialize
            projectService.Logger.WriteLine("This message was written by using the " & _
                "project service in a project extension.", LogCategory.Message)
        End Sub
    End Class
    
    [Export(typeof(ISharePointProjectExtension))]
    internal class GetServiceInProject : ISharePointProjectExtension
    {
        public void Initialize(ISharePointProjectService projectService)
        {
            projectService.Logger.WriteLine("This message was written by using the " +
                "project service in a project extension.", LogCategory.Message);
        }
    }
    

    Pour plus d'informations sur la création d'extensions de projet, consultez Comment : créer une extension de projet SharePoint.

Pour extraire le service dans une extension d'élément de projet

  1. Dans votre implémentation de l'interface ISharePointProjectItemTypeExtension, localisez la méthode Initialize.

  2. Utilisez la propriété ProjectService du paramètre projectItemType pour extraire le service.

    L'exemple de code suivant montre comment utiliser le service du projet pour écrire un message dans la fenêtre Sortie et la fenêtre Liste d'erreurs dans une extension simple de l'élément de projet Définition de liste.

    <Export(GetType(ISharePointProjectItemTypeExtension))> _
    <SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.ListDefinition")> _
    Friend Class GetServiceInProjectItem
        Implements ISharePointProjectItemTypeExtension
    
        Private Sub Initialize(ByVal projectItemType As ISharePointProjectItemType) _
            Implements ISharePointProjectItemTypeExtension.Initialize
            projectItemType.ProjectService.Logger.WriteLine("This message was written " & _
                "by using the project service in an extension for the ListDefinition project item.", _
                LogCategory.Message)
        End Sub
    End Class
    
    [Export(typeof(ISharePointProjectItemTypeExtension))]
    [SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.ListDefinition")]
    internal class GetServiceInProjectItem : ISharePointProjectItemTypeExtension
    {
        public void Initialize(ISharePointProjectItemType projectItemType)
        {
            projectItemType.ProjectService.Logger.WriteLine("This message was written " +
                "by using the project service in an extension for the ListDefinition project item.", 
                LogCategory.Message);
        }
    }
    

    Pour plus d'informations sur la création d'extensions d'élément, consultez Comment : créer une extension d'élément de projet SharePoint.

Pour extraire le service dans une définition de type d'élément de projet

  1. Dans votre implémentation de l'interface ISharePointProjectItemTypeProvider, localisez la méthode InitializeType.

  2. Utilisez la propriété ProjectService du paramètre typeDefinition pour extraire le service.

    L'exemple de code suivant montre comment utiliser le service du projet pour écrire un message dans la fenêtre Sortie et la fenêtre Liste d'erreurs dans une définition de type d'élément de projet simple.

    <Export(GetType(ISharePointProjectItemTypeProvider))> _
    <SharePointProjectItemType("Contoso.CustomAction")> _
    Friend Class CustomActionProvider
        Implements ISharePointProjectItemTypeProvider
    
        Private Sub InitializeType(ByVal projectItemTypeDefinition As ISharePointProjectItemTypeDefinition) _
            Implements ISharePointProjectItemTypeProvider.InitializeType
            projectItemTypeDefinition.ProjectService.Logger.WriteLine("This message was written " & _
                "by using the project service in the Custom Action project item type.", _
                LogCategory.Message)
        End Sub
    End Class
    
    [Export(typeof(ISharePointProjectItemTypeProvider))]
    [SharePointProjectItemType("Contoso.CustomAction")]
    internal class CustomActionProvider : ISharePointProjectItemTypeProvider
    {
        public void InitializeType(ISharePointProjectItemTypeDefinition projectItemTypeDefinition)
        {
            projectItemTypeDefinition.ProjectService.Logger.WriteLine("This message was written " +
                "by using the project service in the Custom Action project item type definition.",
                LogCategory.Message);
        }
    }
    

    Pour plus d'informations sur la définition de types d'élément de projet, consultez Comment : définir un type d'élément de projet SharePoint.

Extraction du service dans les extensions de l'Explorateur de serveurs

Dans une extension du nœud Connexions SharePoint dans l'Explorateur de serveurs, vous pouvez accéder au service du projet à l'aide de la propriété ServiceProvider d'un objet IExplorerNode.

Pour extraire le service dans une extension de l'Explorateur de serveurs

  1. Obtenez un objet IServiceProvider de la propriété ServiceProvider d'un objet IExplorerNode dans votre extension.

  2. Utilisez la méthode GetService pour demander un objet ISharePointProjectService.

    L'exemple de code suivant montre comment utiliser le service du projet pour écrire un message dans la fenêtre Sortie et la fenêtre Liste d'erreurs dans un menu contextuel que l'extension ajoute afin de répertorier des nœuds dans l'Explorateur de serveurs.

    <Export(GetType(IExplorerNodeTypeExtension))> _
    <ExplorerNodeType(ExtensionNodeTypes.ListNode)> _
    Friend Class ListNodeExtension
        Implements IExplorerNodeTypeExtension
    
        Private projectService As ISharePointProjectService
    
        Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _
            Implements IExplorerNodeTypeExtension.Initialize
            AddHandler nodeType.NodeMenuItemsRequested, AddressOf nodeType_NodeMenuItemsRequested
        End Sub
    
        Private Sub nodeType_NodeMenuItemsRequested(ByVal Sender As Object, ByVal e As ExplorerNodeMenuItemsRequestedEventArgs)
            Dim writeMessageMenuItem As IMenuItem = e.MenuItems.Add("Write Message to Output Window and Error List Window")
            AddHandler writeMessageMenuItem.Click, AddressOf writeMessageMenuItem_Click
        End Sub
    
        Private Sub writeMessageMenuItem_Click(ByVal Sender As Object, ByVal e As MenuItemEventArgs)
            Dim node As IExplorerNode = CType(e.Owner, IExplorerNode)
            If projectService Is Nothing Then
                projectService = CType(node.ServiceProvider.GetService(GetType(ISharePointProjectService)), ISharePointProjectService)
            End If
            projectService.Logger.WriteLine("Clicked the menu item for " + node.Text, LogCategory.Message)
        End Sub
    End Class
    
    [Export(typeof(IExplorerNodeTypeExtension))]
    [ExplorerNodeType(ExtensionNodeTypes.ListNode)]
    internal class ListNodeExtension : IExplorerNodeTypeExtension
    {
        private ISharePointProjectService projectService;
    
        public void Initialize(IExplorerNodeType nodeType)
        {
            nodeType.NodeMenuItemsRequested += nodeType_NodeMenuItemsRequested;
        }
    
        void nodeType_NodeMenuItemsRequested(object sender, ExplorerNodeMenuItemsRequestedEventArgs e)
        {
            IMenuItem writeMessageMenuItem = e.MenuItems.Add("Write Message to Output Window and Error List Window");
            writeMessageMenuItem.Click += writeMessageMenuItem_Click;
        }
    
        void writeMessageMenuItem_Click(object sender, MenuItemEventArgs e)
        {
            IExplorerNode node = (IExplorerNode)e.Owner;
            if (projectService == null)
            {
                projectService = (ISharePointProjectService)node.ServiceProvider.GetService(typeof(ISharePointProjectService));
            }
    
            projectService.Logger.WriteLine("Clicked the menu item for " + node.Text, LogCategory.Message);
        }
    }
    

    Pour plus d'informations sur l'extension du nœud Connexions SharePoint dans l'Explorateur de serveurs, consultez Comment : étendre un nœud SharePoint dans l'Explorateur de serveurs.

Extraction du service dans d'autres extensions Visual Studio

Vous pouvez extraire le service du projet dans un VSPackage ou dans toute extension Visual Studio qui a accès à un objet EnvDTE80.DTE2 dans le modèle d'objet Automation, comme un complément ou un Assistant Modèle de projet qui implémente l'interface Microsoft.VisualStudio.TemplateWizard.IWizard.

Dans un VSPackage, vous pouvez demander un objet ISharePointProjectService à l'aide de l'une des méthodes suivantes :

Dans une extension Visual Studio qui a accès à un objet EnvDTE80.DTE2, vous pouvez demander un objet ISharePointProjectService à l'aide de la méthode GetService() d'un objet Microsoft.VisualStudio.Shell.ServiceProvider. Pour plus d'informations, consultez How to: Get a Service from the DTE Object.

Exemple

L'exemple de code suivant montre comment extraire le service du projet dans un complément Visual Studio. Pour utiliser ce code, exécutez-le à partir de la classe Connect dans un projet de complément. L'objet _applicationObject est généré automatiquement dans les projets de complément ; cet objet est une instance de l'interface EnvDTE80.DTE2.

Dim serviceProvider As Microsoft.VisualStudio.Shell.ServiceProvider = _
    New Microsoft.VisualStudio.Shell.ServiceProvider( _
        TryCast(_applicationObject, Microsoft.VisualStudio.OLE.Interop.IServiceProvider))

Dim projectService As Microsoft.VisualStudio.SharePoint.ISharePointProjectService = _
    TryCast(serviceProvider.GetService(GetType(Microsoft.VisualStudio.SharePoint.ISharePointProjectService)), _
        Microsoft.VisualStudio.SharePoint.ISharePointProjectService)

If projectService IsNot Nothing Then
    projectService.Logger.WriteLine("This message was written by using the SharePoint project service.", _
        Microsoft.VisualStudio.SharePoint.LogCategory.Message)
End If
Microsoft.VisualStudio.Shell.ServiceProvider serviceProvider =
    new Microsoft.VisualStudio.Shell.ServiceProvider(
    _applicationObject as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);

Microsoft.VisualStudio.SharePoint.ISharePointProjectService projectService = 
    serviceProvider.GetService(typeof(Microsoft.VisualStudio.SharePoint.ISharePointProjectService))
    as Microsoft.VisualStudio.SharePoint.ISharePointProjectService;

if (projectService != null)
{
    projectService.Logger.WriteLine("This message was written by using the SharePoint project service.",
        Microsoft.VisualStudio.SharePoint.LogCategory.Message);
}

Cet exemple nécessite :

  • Projet de complément Visual Studio. Pour plus d'informations, consultez Comment : créer un complément.

  • Références aux assemblys Microsoft.VisualStudio.OLE.Interop, Microsoft.VisualStudio.Shell et Microsoft.VisualStudio.SharePoint.

Voir aussi

Tâches

Comment : créer un complément

How to: Consume a Service

How to: Get a Service from the DTE Object

Comment : utiliser des Assistants avec des modèles de projet

Concepts

Utilisation du service de projet SharePoint