1

多言語コンテンツ タイプを処理する Visual Studio 拡張機能を作成しようとしています。コードの特定の部分が別の言語であるいくつかの mvc-templates と Django または ASP.NET によく似ています。

Projection を使用する必要があることはわかっており、Visual Studio 拡張機能用に Djangoを既に確認しましたが、そこでの解決策には、言語サービスの作成と、コード エディターに関連するすべてのビットとピースの作成の手間が含まれます。ここでは、MEF を使用するだけで同じ目標を達成しようとしています。

IProjectionBuffer CreateProjectionBuffer()を使用してプロジェクションを作成できることは知っていますが、問題は、現在のTextBufferを作成したものに置き換える方法と、それを行うのに最適な時期です。

また、タイプ「投影」の基本定義を次のように指定すると、次のようになると予想される場合があります。

[Export]
[Name("Whatever")]
[BaseDefinition("code")]
[BaseDefinition("projection")]
internal static ContentTypeDefinition WhateverContentType = null;

プロバイダーで受信した TextBuffer の型を指定しますIProjectionBuffer(すべての IProjectionBuffer は ITextBuffer から継承されます)。そうではなく、投影ベースの定義はこれまで何の効果もないようです。

したがって、tldr バージョンで質問を言い換える場合:

現在のビューに IProjectionBuffer をいつどのように適用しますか (MEF を使用し、エディター インスタンスを作成せずに)?

4

1 に答える 1

1

したがって、私があなたの質問を正しく理解していれば、答えは「あなたは理解していません」です。IWpfTextView は、作成時に ITextBuffer (または IProjectionBuffer などの派生型) の実装にバインドされ、変更できません。できたとしても、他の多くの拡張機能や言語サービスがこれに最も驚いて、おそらくクラッシュするでしょう。

コンテンツ タイプに関する 2 番目の質問に対処するには、基本コンテンツ タイプが「プロジェクション」であると宣言するだけでは、プロジェクション バッファにはなりません。実際に述べているのは、そのタイプのプロジェクション バッファを作成している可能性があるということです。その場合、追加の ITagger サポートが必要なため、タガーは期待どおりにソース バッファに投影されます。

于 2013-02-14T17:24:53.050 に答える