Cómo: Recuperar el servicio de proyecto de SharePoint
Se puede obtener acceso al servicio de proyecto de SharePoint en los siguientes tipos de soluciones:
Una extensión del sistema de proyectos de SharePoint, como la extensión de un proyecto, la extensión de un elemento de proyecto o la definición de tipo de un elemento de proyecto.Para obtener más información sobre estos tipos de extensiones, vea Extender el sistema de proyectos de SharePoint.
Una extensión del nodo Conexiones de SharePoint en el Explorador de servidores.Para obtener más información sobre estos tipos de extensiones, vea Extender el nodo Conexiones de SharePoint en el Explorador de servidores.
Otro tipo de extensión de Visual Studio, como un complemento o un paquete VSPackage.
Recuperar el servicio en extensiones del sistema de proyectos
En cualquier extensión del sistema de proyectos de SharePoint, puede obtener acceso al servicio del proyecto utilizando la propiedad ProjectService de un objeto ISharePointProject.
También puede recuperar el servicio del proyecto mediante los procedimientos siguientes.
Para recuperar el servicio en una extensión de proyecto
En la implementación de la interfaz ISharePointProjectExtension, busque el método Initialize.
Use el parámetro projectService para obtener acceso al servicio.
En el siguiente ejemplo de código se muestra cómo utilizar el servicio del proyecto para escribir un mensaje en la Ventana de salida y en la ventana Lista de errores en una extensión de proyecto sencilla.
<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); } }
Para obtener más información sobre la creación de extensiones de proyectos, vea Cómo: Crear una extensión de proyecto de SharePoint.
Para recuperar el servicio en una extensión de elemento de proyecto
En la implementación de la interfaz ISharePointProjectItemTypeExtension, busque el método Initialize.
Use la propiedad ProjectService del parámetro projectItemType para recuperar el servicio.
En el siguiente ejemplo de código se muestra cómo utilizar el servicio del proyecto para escribir un mensaje en la Ventana de salida y en la ventana Lista de errores en una extensión sencilla del elemento de proyecto Definición de lista.
<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); } }
Para obtener más información sobre la creación de extensiones de elementos de proyectos, vea Cómo: Crear una extensión de elemento de proyecto de SharePoint.
Para recuperar el servicio en una definición de tipo de un elemento de proyecto
En la implementación de la interfaz ISharePointProjectItemTypeProvider, busque el método InitializeType.
Use la propiedad ProjectService del parámetro typeDefinition para recuperar el servicio.
En el siguiente ejemplo de código se muestra cómo utilizar el servicio del proyecto para escribir un mensaje en la Ventana de salida y en la ventana Lista de errores en una definición de tipo de elemento de proyecto sencilla.
<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); } }
Para obtener más información sobre la definición de los tipos de elementos de proyectos, vea Cómo: Definir un tipo de elemento de proyecto de SharePoint.
Recuperar el servicio en extensiones del Explorador de servidores
En una extensión del nodo Conexiones de SharePoint del Explorador de servidores, puede obtener acceso al servicio del proyecto utilizando la propiedad ServiceProvider de un objeto IExplorerNode.
Para recuperar el servicio en una extensión del Explorador de servidores
Obtenga un objeto IServiceProvider de la propiedad ServiceProvider de un objeto IExplorerNode en su extensión.
Para solicitar un objeto ISharePointProjectService, utilice el método GetService.
En el siguiente ejemplo de código se muestra cómo utilizar el servicio del proyecto para escribir un mensaje en la Ventana de salida y en la ventana Lista de errores de un menú contextual que la extensión agrega para hacer una lista de los nodos en el Explorador de servidores.
<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); } }
Para obtener más información sobre cómo extender el nodo Conexiones de SharePoint en el Explorador de servidores, vea Cómo: Extender un nodo de SharePoint en el Explorador de servidores.
Recuperar el servicio en otras extensiones de Visual Studio
Puede recuperar el servicio del proyecto en un paquete VSPackage o en cualquier extensión de Visual Studio con acceso a un objeto EnvDTE80.DTE2 en el modelo de automatización de objetos, como un complemento o un asistente de plantilla de proyecto que implemente la interfaz Microsoft.VisualStudio.TemplateWizard.IWizard.
En un VSPackage, puede solicitar un objeto ISharePointProjectService utilizando uno de los siguientes métodos:
El método GetService de un VSPackage administrado que deriva de la clase Microsoft.VisualStudio.Shell.Package.Para obtener más información, vea Cómo: Utiliza un Servicio.
El método estático Package.GetGlobalService.Para obtener más información, vea Cómo: uso GetGlobalService.
En una extensión de Visual Studio que tiene acceso a un objeto EnvDTE80.DTE2, puede solicitar un objeto ISharePointProjectService utilizando el método GetService() de un objeto Microsoft.VisualStudio.Shell.ServiceProvider.Para obtener más información, vea Cómo: Obtenga un Service del objeto DTE.
Ejemplo
En el ejemplo de código siguiente se muestra cómo recuperar el servicio del proyecto en un complemento Visual Studio.Para usar este código, ejecútelo desde la clase Connect en un proyecto de complemento.El objeto _applicationObject se genera automáticamente en proyectos de complemento; este objeto es una instancia de la interfaz 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);
}
Para este ejemplo se necesita:
Un proyecto de complemento de Visual Studio.Para obtener más información, vea Cómo: Crear un complemento.
Referencias a los ensamblados Microsoft.VisualStudio.OLE.Interop, Microsoft.VisualStudio.Shell y Microsoft.VisualStudio.SharePoint.
Vea también
Tareas
Cómo: Obtenga un Service del objeto DTE
Cómo: Utilizar los asistentes con las plantillas de proyectos