如何:使用 GetGlobalService

有时可能需要获取从非网站的工具窗口或控件容器中服务,或者已经放置与不知道服务所需的服务提供程序。 例如,您可能希望同时写入事件日志从控件内部。 有关这些属性和其他方案的更多信息,请参见 如何:疑难解答服务

通过调用静态 GetGlobalService 方法来获得大多数 Visual Studio 服务。

GetGlobalService 依赖于第一次初始化 Package 从派生的所有 VSPackage 站点的已缓存的服务提供程序。 您必须确保此条件匹配,或者为空服务准备。

幸运的是, GetGlobalService 大多数时候正常工作。

  • 如果 VSPackage 对于其他 VSPackage 仅提供已知的某项服务,请求的 VSPackage 服务网站,在提供服务的 VSPackage 加载之前。

  • 如果工具窗口是由 VSPackage 创建, VSPackage 站点,在工具窗口之前。

  • 如果控件容器受到 VSPackage 创建的工具窗口承载, VSPackage 站点,在控件容器之前。

获取工具窗口或控件容器的内部一个服务

  • 插入此代码在构造函数、工具窗口或控件容器:

    Dim log As IVsActivityLog = TryCast(Package.GetGlobalService(GetType(SVsActivityLog)), IVsActivityLog)
    If log Is Nothing Then 
        Return 
    End If
    
    IVsActivityLog log = Package.GetGlobalService(typeof(SVsActivityLog)) as IVsActivityLog;
    if (log == null) return;
    

    此代码获取一 SVsActivityLog 服务并将其强制 IVsActivityLog 接口,可用于向事件日志中写入。 有关示例,请参见如何:使用事件日志

请参见

任务

如何:疑难解答服务

概念

服务 Essentials

其他资源

服务