Я пытаюсь написать класс в шаблоне T4, который использует Text Template Utility Methods (например, WriteLine, PushIndent, PopIndent). Однако, если я пытаюсь вызвать эти методы в моем классе, я получаю ошибку компиляции, указавПочему я не могу получить доступ к утилитам в классах в шаблонах T4?
Compiling преобразования: Не удается получить доступ к нестатический члену внешнего типа «Microsoft.VisualStudio.TextTemplating.TextTransformation» с помощью вложенного типа 'Microsoft.VisualStudio.TextTemplatingBF13B4A5FBA992E5EF81A8A7A4EACCAC3F7698E169D0F7825ED4F22A28C7C52C2B766D83F4C5ACA13E0DE0B3152B6D966E34EB8C5FC677E145F55BE0485406EC.GeneratedTextTransformation.ClassGenerator'
MCVE (минимальный полный проверяемым пример) будет выглядеть следующим образом:
<#+
public void FunctionSample()
{
WriteLine("Hello"); // This works fine
}
public class SampleClass
{
public static void StaticMethodSample()
{
WriteLine("Hello"); // This does not compile
}
public void InstanceMethodSample()
{
WriteLine("Hello"); // This does not compile either
}
}
#>
Есть ли способ получить доступ к этим методам утилиты в пределах класса или мне нужно использовать бесплатные функции?
(я бегу на Visual Studio 2015 Community)
Полезные методы, такие как 'WriteLine', являются ** экземплярами ** методов класса шаблона, поэтому вам нужна ссылка на экземпляр шаблона для их вызова. – PetSerAl
@PetSerAl Спасибо за информацию - не могли бы вы также рассказать мне, как я могу получить такой экземпляр? Я знаю класс TextTransformation, но он абстрактный и не имеет шаблона Singleton. – feO2x
Экземпляр «TextTransformation» доступен как 'this' в любом экземпляре метода шаблона, например' FunctionSample' в вашем примере. Вот почему они могут вызывать утилиты. – PetSerAl