我正在尝试做的事情
我正在尝试使用 T4 创建邮件消息模板。
我正在使用预处理模板,如果我理解正确,如果我想在运行时生成消息而不引入对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
定义一些帮助方法的基类(我真的认为让每个生成的类都继承自几乎相同但不同的基类没有意义)。
问题
- 如何为我的模板创建一个基类?
- 如何生成一个接受与模板中声明的参数相同的参数的方法?