0

특정 파일 확장명에 대한 분류 자도 내보내는 VSPackage 형식의 VS2013 확장을 구현했습니다. 모든 것은 잘 작동하고 있으며, 귀찮게하는 유일한 것은 GetClassifier()가 IClassifierProvider를 구현할 때 두 번 호출된다는 것입니다. 이는 동일한 변경 사항을 처리하는 두 개의 분류자를 생성하게됩니다. IClassifierProvider의 구현은 아래와 같이 간단합니다.IClassifierProvider의 GetClassifier()가 두 번 호출 되었습니까?

[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

차가움. 분류 자는 IDisposable을 구현하여 분류자를 필요로하는 경우 더 이상 분류자를 필요로하지 않는시기를 알 수 있습니다. –