Gewusst wie: Bereitstellung Sie einen Dienst
VSPackage können Dienste bereitstellen, die andere VSPackages verarbeiten kann. Um einen Dienst bereitzustellen, muss ein VSPackage die folgenden Aufgaben ausführen:
Registrieren Sie den Dienst mit Visual Studio.
Weitere Informationen finden Sie unter Registrieren von Diensten.
Sie können IServiceProvider implementieren.
Die Package-Klasse implementiert und IServiceProvider IServiceContainer. IServiceContainer hält an, um die Rückrufmethoden lokale und globale bedarfsgesteuerten Dienste bereitzustellen.
Hinweis
Wenn ein VSPackage gerade entladen werden soll Visual Studio wartet, bis alle Anforderungen Dienste übermittelt worden sind, dass ein VSPackage bereitstellt.Er ermöglicht die neue Anforderungen nicht über diese Dienste.Daher sollte die VSPackages RevokeService-Methode nicht explizit aufrufen, um einen Dienst beim Entladen zu widerrufen.
Im folgenden Code wird vom Reference.Services-Beispiel (C#) in Visual Studio-Erweiterbarkeits-Beispieleübernommen. Sie stellt den lokalen Dienst, SMyLocalService und die globale Dienst, SMyGlobalService.
Um einen Dienst bereitstellen
Fügen Sie ProvideServiceAttribute VSPackage hinzu, die die globale Dienst bereitstellt.
<ProvideService(GetType(SMyGlobalService))> _ Public NotInheritable Class ServicesPackage Inherits Package
[ProvideService(typeof(SMyGlobalService))] public sealed class ServicesPackage : Package
ProvideServiceAttribute Register SMyGlobalService mit Visual Studio. Nur der globalen Dienst muss registriert sind. Weitere Informationen finden Sie unter Gewusst wie: Registrieren Sie einen Dienst.
Hinzufügen von Rückrufmethoden dem Dienstcontainer hinzu, um die Dienste zu erstellen.
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); }
Das true-Flag weist den Dienstcontainer, um SMyGlobalService einen globalen Dienst auszuführen.
Hinweis
Visual Studio kann eine Anforderung zurückweisen, einen Dienst bereitzustellen.Hierzu wird, wenn ein anderes bereits ein VSPackage den Dienst bereitstellt.
Implementieren Sie die Rückrufmethode.
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; }
ErstellenCreateService entweder SMyGlobalService oder SMyLocalService bei Bedarf.
Implementieren Sie die Klasse des globalen Diensts.
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. }
Die MyGlobalService-Klasse implementiert SMyGlobalService und die IMyGlobalInterface-Schnittstelle, die von diesem Dienst bereitgestellt wird. Der Dienstanbieter, der an den Konstruktor übergeben wird, wird zwischengespeichert, sodass die Schnittstellenmethoden Zugriff auf andere Dienste verfügen.
Implementieren Sie die Klasse des lokalen Diensts.
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. }
Siehe auch
Aufgaben
Gewusst wie: Nehmen Sie einen Dienst in Anspruch
Konzepte
Visual Studio-Erweiterbarkeits-Beispiele