服务 Essentials

服务是这两 Vspackage 之间的协定。 一个 VSPackage 对于其他 VSPackage 提供一组特定接口使用。 Visual Studio 本身为其他 Vspackage 提供服务 Vspackage 的集合。

例如,可以使用 SVsActivityLog 服务中获取 IVsActivityLog 接口,可以用于写入事件日志。 有关更多信息,请参见 如何:使用事件日志

服务没有发现。 因此,必须知道要使用服务的服务标识符 (SID),因此,您必须了解哪些接口它提供。 服务的参考文档提供此信息。

  • 提供的 Vspackage 服务调用服务提供程序。

  • 对于其他 Vspackage 提供的服务调用全局服务。

  • 对 VSPackage 可用实现自己的服务,或对任何对象创建它,调用 local service。

  • 服务加载了在需要时,也就是说,它提供的服务提供程序加载,当服务由其他 VSPackage 请求。

  • 支持按需加载,服务提供程序注册其与 Visual Studio的全局服务。 有关更多信息,请参见 注册服务

  • 在获得一个服务、使用 QueryInterface (非托管代码) 之后或强制转换 (托管代码) 获得所需接口,如:

    TryCast(GetService(GetType(SVsActivityLog)), IVsActivityLog)
    
    GetService(typeof(SVsActivityLog)) as IVsActivityLog;
    
  • 托管代码由其类型引用服务,,而非托管代码由其 GUID 引用服务。

  • 当 Visual Studio 加载 VSPackage 时,会将服务提供程序将 VSPackage 允许访问全局服务的 VSPackage 访问。 这称为 “网站” VSPackage。

  • Vspackage 可以是它们创建的对象的服务提供程序。 例如,窗体可能发送一个请求颜色服务到其帧,可以通过将请求传递给 Visual Studio。

  • 嵌套最深或根本不站点的托管对象,可以调用直接访问的 GetGlobalService 到全局服务。 有关更多信息,请参见如何:使用 GetGlobalService

请参见

参考

强制转换和类型转换(C# 编程指南)

强制转换

概念

列出可用的服务

其他资源

服务