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
Nell'implementazione dell'interfaccia ISharePointProjectExtension, individuare il metodo Initialize.
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
Nell'implementazione dell'interfaccia ISharePointProjectItemTypeExtension, individuare il metodo Initialize.
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
Nell'implementazione dell'interfaccia ISharePointProjectItemTypeProvider, individuare il metodo InitializeType.
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
Ottenere un oggetto IServiceProvider dalla proprietà ServiceProvider di un oggetto IExplorerNode nell'estensione.
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:
Il metodo GetService di un VSPackage gestito che deriva dalla classe Microsoft.VisualStudio.Shell.Package. Per ulteriori informazioni, vedere How to: Consume a Service.
Il metodo statico Package.GetGlobalService. Per ulteriori informazioni, vedere How to: Use GetGlobalService.
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: Get a Service from the DTE Object
Procedura: utilizzare procedure guidate con modelli di progetto