Como: fornecer um serviço.
Um VSPackage pode fornecer serviços que outros VSPackages podem consumir. Para fornecer um serviço, o VSPackage deve executar as seguintes tarefas:
Registrar o serviço com Visual Studio.
Para obter mais informações, consulte Registrando serviços.
Implemente IServiceProvider.
O Package classe implementa ambas IServiceProvider e IServiceContainer. IServiceContainercontém métodos de retorno de chamada para fornecer serviços locais e globais sob demanda.
Dica
Quando um VSPackage está prestes a ser descarregado, Visual Studio aguarda até que todas as solicitações de serviços que fornece a um VSPackage foram entregues.Ele não aceita novas solicitações para esses serviços.Portanto, os VSPackages não deve explicitamente chamar o RevokeService método para revogar um serviço ao descarregar.
O código a seguir é obtido do exemplo Reference.Services (C#) na Exemplos de extensibilidade de Visual Studio. Ele fornece o serviço global, SMyGlobalService, SMyLocalService e o serviço local.
Para fornecer um serviço.
Adicionar o ProvideServiceAttribute para o VSPackage que fornece o serviço global.
<ProvideService(GetType(SMyGlobalService))> _ Public NotInheritable Class ServicesPackage Inherits Package
[ProvideService(typeof(SMyGlobalService))] public sealed class ServicesPackage : Package
ProvideServiceAttributeregisters SMyGlobalService with Visual Studio. Apenas o serviço global deve ser registrado. Para obter mais informações, consulte Como: registrar um serviço..
Adicione métodos de retorno de chamada para o contêiner de serviço para criar os serviços.
Public Sub New() Dim serviceContainer As IServiceContainer = TryCast(Me, IServiceContainer) Dim callback As New ServiceCreatorCallback(AddressOf CreateService) serviceContainer.AddService(GetType(SMyGlobalService), callback, True) serviceContainer.AddService(GetType(SMyLocalService), callback) End Sub
public ServicesPackage() { IServiceContainer serviceContainer = this as IServiceContainer; ServiceCreatorCallback callback = new ServiceCreatorCallback(CreateService); serviceContainer.AddService(typeof(SMyGlobalService), callback, true); serviceContainer.AddService(typeof(SMyLocalService), callback); }
O true sinalizador instrui o recipiente de serviço para fazer SMyGlobalService um serviço global.
Dica
Visual Studiopode rejeitar uma solicitação para fornecer um serviço.Ele faz isso, se outro VSPackage já fornece o serviço.
Implemente o método de retorno de chamada.
Private Function CreateService(ByVal container As IServiceContainer, ByVal serviceType As Type) As Object If GetType(SMyGlobalService) Is serviceType Then Return New MyGlobalService(Me) End If If GetType(SMyLocalService) Is serviceType Then Return New MyLocalService(Me) End If End Function
private object CreateService(IServiceContainer container, Type serviceType) { if (typeof(SMyGlobalService) == serviceType) return new MyGlobalService(this); if (typeof(SMyLocalService) == serviceType) return new MyLocalService(this); return null; }
CreateServicecria um SMyGlobalService ou SMyLocalService sob demanda.
Implemente a classe de serviço global.
Public Class MyGlobalService Inherits SMyGlobalService Implements IMyGlobalService Private serviceProvider As IServiceProvider Public Sub New(ByVal sp As IServiceProvider) Trace.WriteLine("Constructing a new instance of MyGlobalService") serviceProvider = sp End Sub ' Implement the methods of IMyGlobalService here. End Class
public class MyGlobalService : SMyGlobalService, IMyGlobalService { private IServiceProvider serviceProvider; public MyGlobalService(IServiceProvider sp) { Trace.WriteLine( "Constructing a new instance of MyGlobalService"); serviceProvider = sp; } // Implement the methods of IMyGlobalService here. }
O MyGlobalService classe implementa ambos SMyGlobalService e o IMyGlobalInterface interface fornecida por este serviço. O provedor de serviços passado para o construtor é armazenada em cache para que os métodos de interface tenham acesso a outros serviços.
Implemente a classe de serviço local.
Public Class MyLocalService Inherits SMyLocalService Implements IMyLocalService Private serviceProvider As IServiceProvider Public Sub New(ByVal sp As IServiceProvider) Trace.WriteLine("Constructing a new instance of MyLocalService") serviceProvider = sp End Sub ' Implement the methods of IMyLocalService here. End Class
public class MyLocalService : SMyLocalService, IMyLocalService { private IServiceProvider serviceProvider; public MyLocalService(IServiceProvider sp) { Trace.WriteLine( "Constructing a new instance of MyLocalService"); serviceProvider = sp; } // Implement the methods of IMyLocalService here. }
Consulte também
Tarefas
Conceitos
Exemplos de extensibilidade de Visual Studio