我正在使用 Razor 语法编写一个小型电子邮件模板引擎来填充令牌。我有几种电子邮件类型:
public enum EmailType { Welcome, Reminder }
Run Code Online (Sandbox Code Playgroud)
这些类型有相应的模板和模型,例如Welcome电子邮件有一个模板:
<p>Welcome, @Model.Name</p>
Run Code Online (Sandbox Code Playgroud)
和相应的模型:
public class WelcomeModel { public string Name { get; set; } }
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个方法来为给定的枚举强制一个正确的模型,我会想象这样的事情:
public ITemplate<T> GenerateTemplate(EmailType emailType)
{
switch (emailType)
{
case EmailType.Welcome:
return new EmailTemplate<WelcomeModel>();
case EmailType.Reminder:
return new EmailTemplate<ReminderModel>();
// ...
}
Run Code Online (Sandbox Code Playgroud)
where EmailTemplate<T> : ITemplate<T>,那么我可以链接该方法:
engine
.GenerateTemplate(EmailType.Welcome)
.WithModel(new WelcomeModel()) // this knows it wants WelcomeModel
// and should complain with compiler error otherwise
Run Code Online (Sandbox Code Playgroud)
我在此处显示的代码无法编译,因为T未知。然而,这T不能推断:
public ITemplate<T> …Run Code Online (Sandbox Code Playgroud)