我正在尝试创建一个处理多语言内容类型的 Visual Studio 扩展。很像一些 mvc 模板和 Django 或 ASP.NET,其中某些部分的代码是另一种语言。
我知道我应该使用 Projection 并且我已经检查了Django 的 Visual Studio 扩展,但那里的解决方案包括创建语言服务并费力地创建与代码编辑器相关的所有点点滴滴。在这里,我试图通过使用 MEF 来实现相同的目标。
我知道你可以IProjectionBuffer CreateProjectionBuffer()
用来创建一个投影,但问题是如何用创建的TextBuffer替换当前的 TextBuffer以及何时是最好的时间。
也有人可能期望,如果他像这样指定“投影”类型的基本定义:
[Export]
[Name("Whatever")]
[BaseDefinition("code")]
[BaseDefinition("projection")]
internal static ContentTypeDefinition WhateverContentType = null;
在提供程序中接收到的 TextBuffer 是类型IProjectionBuffer
(毕竟 IProjectionBuffer 是从 ITextBuffer 继承的)。哪个不是,似乎投影基础定义没有任何效果。
因此,如果我想在 tldr 版本中重新表述我的问题:
您如何以及何时将 IProjectionBuffer 应用于当前视图(使用 MEF 并且不创建编辑器实例)?