Condividi tramite


Procedura: recuperare il servizio di progetto SharePoint

È possibile accedere al servizio di progetto SharePoint nei tipi di soluzioni seguenti:

  • Estensione del sistema di progetto SharePoint, ad esempio un'estensione di progetto, un'estensione di elemento di progetto o una definizione di tipo di elemento di progetto. Per ulteriori informazioni su questi tipi di estensioni, vedere Estensione del sistema di progetto SharePoint.

  • Estensione del nodo Connessioni di SharePoint in Esplora server. Per ulteriori informazioni su questi tipi di estensioni, vedere Estensione del nodo Connessioni di SharePoint in Esplora server.

  • Estensione di Visual Studio di altro tipo, ad esempio un componente aggiuntivo o un VSPackage.

Recupero del servizio nelle estensioni del sistema di progetto

In qualsiasi estensione del sistema di progetto SharePoint, è possibile accedere al servizio di progetto tramite la proprietà ProjectService di un oggetto ISharePointProject.

Il servizio di progetto può essere recuperato anche mediante le procedure seguenti.

Per recuperare il servizio in un'estensione di progetto

  1. Nell'implementazione dell'interfaccia ISharePointProjectExtension, individuare il metodo Initialize.

  2. Utilizzare il parametro projectService per accedere al servizio.

    Nell'esempio di codice seguente viene mostrato come utilizzare il servizio di progetto per scrivere un messaggio nelle finestre Output ed Elenco errori in un'estensione di progetto semplice.

    <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);
        }
    }
    

    Per ulteriori informazioni sulla creazione di estensioni di progetto, vedere Procedura: creare un'estensione di progetto SharePoint.

Per recuperare il servizio in un'estensione di elemento di progetto

  1. Nell'implementazione dell'interfaccia ISharePointProjectItemTypeExtension, individuare il metodo Initialize.

  2. Utilizzare la proprietà ProjectService del parametro projectItemType per recuperare il servizio.

    Nell'esempio di codice seguente viene mostrato come utilizzare il servizio di progetto per scrivere un messaggio nelle finestre Output ed Elenco errori in un'estensione semplice dell'elemento di progetto Definizione di elenco.

    <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);
        }
    }
    

    Per ulteriori informazioni sulla creazione di estensioni di elemento di progetto, vedere Procedura: creare un'estensione di elemento del progetto SharePoint.

Per recuperare il servizio in una definizione di tipo di elemento di progetto

  1. Nell'implementazione dell'interfaccia ISharePointProjectItemTypeProvider, individuare il metodo InitializeType.

  2. Utilizzare la proprietà ProjectService del parametro typeDefinition per recuperare il servizio.

    Nell'esempio di codice seguente viene mostrato come utilizzare il servizio di progetto per scrivere un messaggio nelle finestre Output ed Elenco errori in una definizione di tipo di elemento di progetto semplice.

    <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);
        }
    }
    

    Per ulteriori informazioni sulla definizione di tipi di elemento di progetto, vedere Procedura: definire un tipo di elemento di progetto SharePoint.

Recupero del servizio nelle estensioni di Esplora server

In un'estensione del nodo Connessioni di SharePoint in Esplora server è possibile accedere al servizio di progetto tramite la proprietà ServiceProvider di un oggetto IExplorerNode.

Per recuperare il servizio in un'estensione di Esplora server

  1. Ottenere un oggetto IServiceProvider dalla proprietà ServiceProvider di un oggetto IExplorerNode nell'estensione.

  2. Utilizzare il metodo GetService per richiedere un oggetto ISharePointProjectService.

    Nell'esempio di codice seguente viene mostrato come utilizzare il servizio di progetto per scrivere un messaggio nelle finestre Output ed Elenco errori da un menu di scelta rapida che l'estensione aggiunge ai nodi di elenco in Esplora server.

    <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);
        }
    }
    

    Per ulteriori informazioni sull'estensione del nodo Connessioni di SharePoint in Esplora server, vedere Procedura: estendere un nodo SharePoint in Esplora server.

Recupero del servizio in estensioni di Visual Studio di altro tipo

È possibile recuperare il servizio di progetto in un VSPackage o in qualsiasi estensione di Visual Studio in grado di accedere a un oggetto EnvDTE80.DTE2 nel modello a oggetti di automazione, ad esempio un componente aggiuntivo o una procedura di creazione guidata di modelli di progetto che implementa l'interfaccia Microsoft.VisualStudio.TemplateWizard.IWizard.

In un VSPackage è possibile richiedere un oggetto ISharePointProjectService tramite uno dei metodi seguenti:

In un'estensione di Visual Studio in grado di accedere a un oggetto EnvDTE80.DTE2 è possibile richiedere un oggetto ISharePointProjectService tramite il metodo GetService() di un oggetto Microsoft.VisualStudio.Shell.ServiceProvider. Per ulteriori informazioni, vedere How to: Get a Service from the DTE Object.

Esempio

Nell'esempio di codice seguente viene illustrato come recuperare il servizio di progetto in un componente aggiuntivo di Visual Studio. Per utilizzare questo codice, eseguirlo dalla classe Connect in un progetto di componente aggiuntivo. L'oggetto _applicationObject viene generato automaticamente nei progetti di componente aggiuntivo. Questo oggetto è un'istanza dell'interfaccia 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);
}

Per questo esempio occorre fornire quanto segue:

  • Progetto di componente aggiuntivo di Visual Studio Per ulteriori informazioni, vedere Procedura: creare un componente aggiuntivo.

  • Riferimenti agli assembly Microsoft.VisualStudio.OLE.Interop, Microsoft.VisualStudio.Shell e Microsoft.VisualStudio.SharePoint.

Vedere anche

Attività

Procedura: creare un componente aggiuntivo

How to: Consume a Service

How to: Get a Service from the DTE Object

Procedura: utilizzare procedure guidate con modelli di progetto

Concetti

Utilizzo del servizio di progetto SharePoint