IClassifierProvider 的 GetClassifier() 调用了两次?

GetClassifier() from IClassifierProvider called twice?

我以 VSPackage 的形式实现了 VS2013 扩展,它还为特定文件扩展名导出分类器。一切正常,唯一困扰我的是我在 IClassifierProvider 的实现中调用了两次 GetClassifier()。这导致创建两个分类器,它们都处理相同的变化。 IClassifierProvider的实现很简单,如下图

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

我试图通过删除与分类无关的所有内容来最小化我的包,但无济于事。非常感谢对此的建议。

更新:关于 GetClassifier 调用中的文本缓冲区不同,我错了。相应地更新了此 post。

您应该描述的一件事是什么手势导致使用不同缓冲区的多次调用。对于每个打开的文件,您肯定会收到对 GetClassifier 的调用,并且您也可能会收到对同一文本缓冲区的多次调用。对于同一个文本缓冲区,常见的模式是让一些其他组件监视文件更改,处理一次,然后通过所有分类器报告更改。

还有 "fancy" 文本缓冲区可以包含其他文本缓冲区的内容的情况,这些缓冲区用于各种功能。这也可以解释您所看到的。