Что я пытаюсь сделать
Я пытаюсь использовать T4 для создания шаблона почтового сообщения.Настройка предварительно обработанного шаблона T4
Я использую препроцессированного шаблон, который, если я правильно understoo, что я должен делать, если я хочу, чтобы создать сообщение во время выполнения без введения зависимости от Microsoft.VisualStudio.TextTemplating
сборки.
Поскольку я хочу передать некоторые данные в шаблон, я добавил ему параметры:
<#@ template language="C#" #>
<#@ parameter name="Param1" type="System.String" #>
<#@ parameter name="Param2" type="System.
Lorem <#= Param1 #> dolor <#= Param2 #>
Тогда я могу генерировать сообщение передачи аргументов, как это:
static void Main(string[] args) {
var template = new LoremIpsum();
template.Session = new Dictionary<string, object>() {
{"Param1", "ipsum"},
{"Param2", "sit amet"},
};
template.Initialize();
string text = template.TransformText();
}
чем проблема
Поскольку мне нужно сгенерировать несколько из этих классов, я бы хотел, чтобы у всех их был общий метод отправки почты, примерно так:
public void SendMail(string to, IDictionary<string, object> parameters)
или, еще лучше:
public void SendMail(string to, string Param1, string Param2)
Поскольку сгенерированные классы являются неполными, можно добавить методы их добавления другого заявления частичного класса, но это означало бы, что я должен был бы повторить (более или менее) того же кода для всех сгенерированных классов.
То, что я пытался до сих пор
я попытался создать базовый класс, но если я пытаюсь сделать это:
<#@ template language="C#" inherits="MailTemplateBase" #>
затем сгенерированные разрывы кода, поскольку сгенерированный класс полагался на LoremIpsumBase
базовый класс, который определил некоторые вспомогательные методы (и я действительно не вижу смысла в том, чтобы каждый сгенерированный класс наследовал от почти идентичного, но отличного базового класса).
Вопросы
- Как я могу иметь базовый класс для моих шаблонов?
- Как я могу сгенерировать метод, который принимает те же параметры, что и те, что указаны в шаблоне?
Я отредактировал вопрос довольно много, но я думаю, что копирование сгенерированного базового класса и использование его в качестве базового класса - это путь. Я боюсь, что это может сломаться со следующими версиями или обновлениями VS, хотя ... –
Да, я могу понять, что это вызвало разрыв между RTM и SP1. –
См. Мое обновление для рекомендации о том, как двигаться вперед. –