如何: 提供服務
VSPackage 可以提供其他的 VSPackages 可以取用的服務。 若要提供服務,VSPackage 必須執行下列工作:
註冊卸除Visual Studio。
如需詳細資訊,請參閱 註冊服務。
Package類別會實作這兩個 IServiceProvider 和IServiceContainer。 IServiceContainer會保留在需要提供本機和全域的服務的回呼方法。
![]() |
---|
無法卸載,VSPackage 時Visual Studio會等到所有的 VSPackage 所提供的服務的要求已傳送。不允許新的要求,這些服務。因此,VSPackages 不應該明確地呼叫RevokeService方法,以撤銷服務時卸載。 |
下列程式碼由 Reference.Services 範例 (C#) 取得Visual Studio 的擴充性範例。 它提供本機服務、 SMyLocalService,以及通用服務,也就是 SMyGlobalService。
若要提供服務
新增ProvideServiceAttribute到 VSPackage,提供通用的服務。
<ProvideService(GetType(SMyGlobalService))> _ Public NotInheritable Class ServicesPackage Inherits Package
[ProvideService(typeof(SMyGlobalService))] public sealed class ServicesPackage : Package
ProvideServiceAttributeregisters SMyGlobalService with Visual Studio. 通用的服務必須先註冊。 如需詳細資訊,請參閱 How to: 註冊服務。
加入至服務容器,來建立服務的回呼方法。
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); }
true旗標會指示服務容器,讓SMyGlobalService通用的服務。
注意事項
Visual Studio可以拒絕的要求提供服務。它是如果其他的 VSPackage 已經提供的服務。
實作回呼方法。
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; }
CreateService建立其中一個SMyGlobalService或SMyLocalService隨選。
實作通用的服務類別。
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. }
MyGlobalService類別會實作兩個SMyGlobalService和IMyGlobalInterface這項服務所提供的介面。 傳遞至建構函式的服務提供者會快取,使介面方法可以存取其他服務。
實作本機服務類別。
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. }