私は、インターネット上で言語サービスを提供する 2 つの方法を見つけました。
最初の方法では、タイマーを使用しIOleComponentManager
て登録し、アイドル時間中にサービスを呼び出します。
2 番目の方法では、サービスを としてケーシングし、「オンデマンドでサービスを提供する」ためにIServiceContainer
を追加します。ServiceCreatorCallback
おそらく、2 番目の方法が「推奨される方法」になっていると思われます。残念ながら、このメソッドを使用すると、実装OnSynchronizeDropdowns
で呼び出されることはありません。TypeAndMembersDropdownBars
また、 myLanguageService
がファイルにエラーを見つけた場合、 を使用ParseRequest.Sink.AddError()
してエラー リストにエラーを追加します。「オンデマンド」を提案すると、これらのエラーは GUI に表示されませんが、コードをデバッグするとエラーが追加されます。
構文の強調表示、「定義に移動」、および「すべての参照を検索」が引き続き機能するため、言語サービスが登録されていることがわかります。
「オンデマンドでサービスを提供する」ために使用しているコードは次のとおりです。
IServiceContainer serviceContainer = this as IServiceContainer;
ServiceCreatorCallback callback = new ServiceCreatorCallback(CreateLanguageService);
serviceContainer.AddService(typeof(MyLanguageService), callback, true);
LanguageService
オンデマンドで提供するときに、一部の機能が機能しない理由を誰か教えてもらえますか? 私は何か不足していますか、それとも完全に機能する言語サービスを意図したものではありませんか?