2015-04-13 1 views
0

Я пытаюсь использовать этот пример от msdn о том, как создать собственный хост для генерации текстового шаблона.Текстовый шаблон пользовательского хоста: как реализовать ResolveDirectiveProcessor

Класс CustomCmdLineHost реализует интерфейс ITextTemplatingEngineHost, но не полностью, ResolveDirectiveProcessor не реализован, и он бросает каждый раз исключение, которое является нормальным. Вот ResolveDirectiveProcessor метод:

public Type ResolveDirectiveProcessor(string processorName) 
    { 
     //This host will not resolve any specific processors. 
     //Check the processor name, and if it is the name of a processor the 
     //host wants to support, return the type of the processor. 
     //--------------------------------------------------------------------- 
     if (string.Compare(processorName, "XYZ", StringComparison.OrdinalIgnoreCase) == 0) 
     { 
      //return typeof(); 
     } 
     //This can be customized to search specific paths for the file 
     //or to search the GAC 
     //If the directive processor cannot be found, throw an error. 
     throw new Exception("Directive Processor not found"); 
    } 

и processorName passsed к этой функции «T4VSHost»,

Теперь вопрос: Что тип «T4VSHost», чтобы вернуться в этот метод?

P.S .: Я попробовал «Microsoft.Data.Entity.Design.VisualStudio.Directives.FallbackT4VSHostProcessor», но кажется, что он не существует в любом пространстве имен.

+0

Вы тестируете это прямо из командной строки, как в примере? – Frank

+0

@Frank нет, он вызывается каким-либо другим кодом в приложении – dafriskymonkey

ответ

0

Похоже, что единственный способ - создать этот тип. как ? путем создания класса (позволяет называть его FallbackT4VSHostProcessor), который наследует от абстрактного класса DirectiveProcessor, который живет в пространстве имен Microsoft.VisualStudio.TextTemplating (единственный пример, который я нашел в Интернете, - Here). то мы должны вернуть тип FallbackT4VSHostProcessor в ResolveDirectiveProcessor, как это:

Type ITextTemplatingEngineHost.ResolveDirectiveProcessor(string processorName) 
    { 
     if (string.Compare(processorName, "T4VSHost", StringComparison.OrdinalIgnoreCase) == 0) 
     { 
      return typeof(FallbackT4VSHostProcessor); 
     } 
     throw new Exception("Directive Processor not found"); 
    } 

Я надеюсь, что это поможет кому-нибудь.

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

  • Нет связанных вопросов^_^