共用方式為


如何: 提供服務

VSPackage 可以提供其他的 VSPackages 可以取用的服務。 若要提供服務,VSPackage 必須執行下列工作:

Package類別會實作這兩個 IServiceProvider 和IServiceContainerIServiceContainer會保留在需要提供本機和全域的服務的回呼方法。

注意事項注意事項

無法卸載,VSPackage 時Visual Studio會等到所有的 VSPackage 所提供的服務的要求已傳送。不允許新的要求,這些服務。因此,VSPackages 不應該明確地呼叫RevokeService方法,以撤銷服務時卸載。

下列程式碼由 Reference.Services 範例 (C#) 取得Visual Studio 的擴充性範例。 它提供本機服務、 SMyLocalService,以及通用服務,也就是 SMyGlobalService。

若要提供服務

  1. 新增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: 註冊服務

  2. 加入至服務容器,來建立服務的回呼方法。

    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 已經提供的服務。

  3. 實作回呼方法。

    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隨選。

  4. 實作通用的服務類別。

    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這項服務所提供的介面。 傳遞至建構函式的服務提供者會快取,使介面方法可以存取其他服務。

  5. 實作本機服務類別。

    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.
    }
    

請參閱

工作

How to: 使用服務

概念

Visual Studio 的擴充性範例

服務的基本資訊

其他資源

服務