2013-08-23 4 views
0

Я пытаюсь добавить подсветку синтаксиса для настраиваемого типа контента на основе текста, например.Как заставить рекламодателя работать с настраиваемым типом контента

static class RTextContentType 
{ 
    public const string ContentTypeName = Constants.CONTENT_TYPE; 
    [Export, Name(ContentTypeName), BaseDefinition("text")] 
    internal static ContentTypeDefinition ContentTypeDefinition = null; // set via MEF 
} 

Затем поставщик классификатор объявлен как это,

[Export(typeof(IClassifierProvider)), ContentType(Constants.CONTENT_TYPE)] 
class RTextClassifierProvider : IClassifierProvider 
{ 
    ... 
} 

Проблема заключается в том, что конструктор поставщика никогда не дозвонились моих указанных расширений. Обратите внимание, что я предоставляю фабрики редактора, а расширения файлов связаны с фабрикой. Я вижу, что завод получает инициализацию путем отладки для всех связанных файлов.

Если я изменяю тип содержимого на "text", то вызывающий конструктор получает вызов.

Итак, вопрос в том, как можно сопоставить настраиваемый тип контента с расширением файла?

Второе примечание, используя FileExtensionToContentTypeDefintion

не вариант, так как это не позволяет много возможностей ..

Спасибо за помощь :)

ответ

2

Ваше осуществление IVsEditorFactory отвечает за настройка типа содержимого текста, отображаемого в редакторе. По умолчанию реализация этого интерфейса включает специальную поддержку для FileExtensionToContentTypeDefinitionAttribute в качестве простого механизма расширения для пользователей, для которых не требуются некоторые из более сложных функций (например, проекционные буферы для нескольких типов контента).

Класс DjangoEditorFactory содержит вложенный класс с именем TextBufferEventListener, в котором показан один пример того, как фабрика редактора может назначать типы содержимого буферам, отображаемым в окне редактора.

+0

Да, я рассматриваю эту реализацию прямо сейчас. Кажется довольно сложным. Поэтому я предполагаю, что мне также придется реализовать экземпляр этого, но, возможно, без буфера элиции. Что вы подразумеваете, по умолчанию, реализация btw? Шаблон из Visual Studio? Я не планирую иметь несколько типов контента, поэтому, возможно, эта реализация по умолчанию может быть полезна. – FailedDev

+1

Если вы не связываете расширение своего файла с настраиваемой фабрикой редакторов, Visual Studio будет использовать собственную внутреннюю реализацию фабрики редакторов. Эта реализация назначает типы контента несколькими различными способами, одним из которых является упомянутый вами атрибут. –

+0

Но, конечно, использование реализации по умолчанию не позволяет человеку создавать панели навигации и т. Д. Или добавлять в редактор новые расширения файлов. – FailedDev

Смежные вопросы