我已经创建了Classifier
、ErrorTagger
、SignatureHelp
和TextCompletion
类。它们都是由VS发现的MEF组件的提供者创建的。
问题是,我想在这些组件之间共享一个C#对象,以共享状态,并允许我省去重新解析每个组件的相同文本。我该怎么做呢?我需要这个状态是每个正在编辑的文件。
VS发现提供者并使用它们创建我的组件。但是,我如何在它们之间传递或共享状态呢?我确实使用了全局单例,但是当我在VS中编辑多个文件时,它们都共享相同的单例,但我需要为每个正在编辑的文件提供一个不同的实例。
发布于 2016-07-02 02:04:32
一种常见的方法是ITextView
和ITextBuffer
都有一个属性属性,您可以将其用作通用的袋子来放东西。上面甚至还有一个GetOrCreateSignletonProperty助手。通常会有一些组件监视ITextBuffer
的更改,并以这种方式进行解析,而每个其他组件只是获取这个每个文本缓冲区的对象。
分类器和标记器也可以实现IDisposable
,并且ITextViews
有一个关闭的事件,因此也可以在从ITextBuffer
/ITextView
到您自己的类型的某个地方拥有一个静态字典,并以这种方式管理生存期。
不管是哪种方式,你都要做--测试!很容易意外地搞砸并泄漏ITextBuffer
或ITextView
。
https://stackoverflow.com/questions/38148427
复制相似问题