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