我正在尝试创建一个处理多语言内容类型的Visual Studio扩展。就像一些mvc-templates和Django或ASP.NET一样,代码的某些部分是另一种语言。
我知道我应该使用Projection,我已经检查了Django for Visual Studio extension但是那里的解决方案包括创建一个语言服务,并且遇到了创建与代码编辑器相关的所有零碎的麻烦。在这里,我试图通过使用MEF来实现相同的目标。
我知道您可以使用IProjectionBuffer CreateProjectionBuffer()
创建投影,但问题是如何将当前的 TextBuffer 替换为创建的投影,何时是最佳时间。< / p>
如果他像这样指定“投影”类型的基本定义,也可以期待:
[Export]
[Name("Whatever")]
[BaseDefinition("code")]
[BaseDefinition("projection")]
internal static ContentTypeDefinition WhateverContentType = null;
提供者中收到的TextBuffer属于IProjectionBuffer
类型(在所有IProjectionBuffer继承自ITextBuffer之后)。哪些不,似乎投影基础定义没有任何影响。
所以,如果我想在tldr版本中重新解释我的问题:
如何以及何时将IProjectionBuffer应用于当前视图(使用MEF而不创建编辑器实例)?
答案 0 :(得分:1)
因此,如果我正确理解你的问题,答案就是“你没有。” IWpfTextView在创建时绑定到ITextBuffer(或派生类型,如IProjectionBuffer)的实现,并且无法更改。即使你可以,许多其他扩展和语言服务也会对此感到非常惊讶,并且可能会崩溃。
要解决有关内容类型的第二个问题:只需声明基本内容类型为“投影”不会使您成为投影缓冲区。所有真正指出的是你可能正在创建那种类型的投影缓冲区,当你需要一些额外的ITagger支持时,标记器会像你期望的那样投射到源缓冲区。