我发现了两种在互联网上提供语言服务的方法。
第一种方法IOleComponentManager
是在空闲时间使用并注册一个计时器来调用我的服务。
第二种方法涉及将我的服务封装为一个IServiceContainer
并添加一个ServiceCreatorCallback
以“按需提供服务”。
据说第二种方式现在是做事的“首选方式”。不幸的是,当我使用这种方法时,我的实现OnSynchronizeDropdowns
永远不会被调用。TypeAndMembersDropdownBars
此外,当我LanguageService
在文件中发现错误时,它会使用ParseRequest.Sink.AddError()
将错误添加到错误列表中。当提供“按需”时,这些错误不会显示在 GUI 中,即使我在调试代码时看到它们被添加。
我知道我的语言服务正在注册,因为语法突出显示、“转到定义”和“查找所有参考”仍然有效。
这是我用来“按需提供服务”的代码:
IServiceContainer serviceContainer = this as IServiceContainer;
ServiceCreatorCallback callback = new ServiceCreatorCallback(CreateLanguageService);
serviceContainer.AddService(typeof(MyLanguageService), callback, true);
谁能告诉我为什么我的某些功能LanguageService
在按需提供时不起作用?我是否遗漏了什么,或者这种方式不适合功能齐全的语言服务?