0

特定のファイル拡張子の分類子もエクスポートするVSPackageの形式でVS2013拡張を実装しました。すべてがうまくいきます。唯一気になる点は、IClassifierProviderの実装でGetClassifier()が2回呼び出されることです。これにより、同じ変更を処理する2つの分類器が作成されます。 IClassifierProviderの実装は、以下に示すように簡単です。IClassifierProviderのGetClassifier()が2回呼び出されましたか?

[Export(typeof(IClassifierProvider))] 
[ContentType(MyConstants.MyContentType)] 
public sealed class MyClassifierProvider : IClassifierProvider 
{ 
    public IClassifier GetClassifier(ITextBuffer textBuffer) 
    { 
     return new MyClassifier(textBuffer); 
    } 
} 

分類に関係しないものはすべて無駄に削除してパッケージを最小限に抑えようとしました。これについてアドバイスをいただければ幸いです。

更新:GetClassifier呼び出しでテキストバッファが異なるのは間違っていました。これに応じてこの記事を更新しました。

答えて

1

ジェスチャが異なるバッファを使用して複数の呼び出しを行ったことが、説明する必要があります。開いている各ファイルに対してGetClassifierを呼び出すことができます。同じテキストバッファに対しても複数の呼び出しを取得する可能性があります。同じテキストバッファの場合、共通のパターンは、他のコンポーネントがファイルの変更を監視し、一度処理してから、すべての分類子を介して変更を報告することです。

テキストバッファにさまざまな機能に使用される他のテキストバッファの内容を含めることができる「派手な」ケースもあります。それはまたあなたが見ているものを説明するかもしれません。

+0

私はバッファが違うことに間違っていました。もう一度チェックしました。これで、クラシファイアとバッファのキャッシュを保持することで、この問題を回避できるようになりました。 – edwabr123

+1

Cool。あなたのクラシファイアは、その能力が必要な場合、あなたのクラシファイアが必要なくなったときを知るためのIDisposableを実装することができます。 –

関連する問題