服務的基本資訊
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
服務是兩個 VSPackages 之間的合約。 一個 VSPackage 提供一組特定的介面來使用另一個 VSPackage。 Visual Studio本身是提供服務給其他 VSPackages 的 Vspackage 的集合。
例如,您可以使用 SVsActivityLog 服務以取得 IVsActivityLog 介面,可用來寫入活動記錄檔。 如需詳細資訊,請參閱How to︰ 使用活動記錄。
Visual Studio也提供一些內建的服務,尚未註冊。 VSPackages 可以取代內建或其他服務提供服務的覆寫。 只有一個服務覆寫所允許的任何服務。
服務會有任何可測知性。 因此,您必須知道您想要使用的服務的服務識別項 (SID),而且您必須知道它所提供的介面。 服務的參考文件提供這項資訊。
提供服務的 VSPackages 稱為服務提供者。
提供給其他 VSPackages 服務稱為 「 全域服務 」。
僅適用於 VSPackage 實作,或建立任何物件,稱為 「 本機服務的服務。
服務覆寫時,會呼叫取代內建的服務或其他封裝,提供服務的服務。
視需要載入服務或服務的覆寫,另一個 VSPackage 要求提供的服務時,也就是載入服務提供者。
若要支援視需要載入,服務提供者會註冊全域服務Visual Studio。 如需詳細資訊,請參閱登錄服務。
取得服務之後,請使用QueryInterface (unmanaged 程式碼) 或轉型 (managed 程式碼) 來取得所需的介面,例如︰
TryCast(GetService(GetType(SVsActivityLog)), IVsActivityLog)
GetService(typeof(SVsActivityLog)) as IVsActivityLog;
Managed 程式碼是指服務依其類型,而 unmanaged 程式碼是指服務透過其 GUID。
當Visual Studio載入的 VSPackage,就會傳遞服務提供者至 VSPackage 存取給全域服務 VSPackage。 這稱為 「 地點 」 VSPackage。
VSPackages 可以是服務提供者所建立的物件。 例如,表單會傳送色彩服務的要求至其框架,可能會傳遞要求Visual Studio。
深度巢狀的或未設置,受管理的物件可能會呼叫GetGlobalService全域服務的直接存取。 如需詳細資訊,請參閱How to︰ 使用 GetGlobalService。