Мы делаем это много.Вот пример того, как мы повторно используем общий шаблон T4, но при этом «передаем параметры» в него:
<#
var currentUsername = "billclinton"; // this is for integration tests impersonating a user in our case
#>
<#@ include file="..\SomeTemplateThatIWantToReuseHere.tt" #>
И мы сохраняем наш шаблон T4 «универсальным», динамически определяя местоположение, в котором шаблон T4 фактически запущен(в данном случае шаблон T4, в котором есть строка include
):
string namespaceName = code.VsNamespaceSuggestion();
var namespaceParts = namespaceName.Split('.');
var currentNamespaceLeg = namespaceParts.Last();
Это позволяет нам создавать очень мощные шаблоны без необходимости дублировать наши шаблоны.Единственное, что «дублируется», - это наши 4-строчные .tt
файлы, в которых есть вызов include
, но они в значительной степени не требуют обслуживания, за исключением той «конфигурации», которую мы хотим выполнить, передав переменные так, как мысделай это.