我使用默认的T4模板来基于我的UML模型生成代码。我有许多类公开模板参数。这些代码按照预期生成代码。例如,MessageResponse
类公开了TMessageType
的一个参数。这将生成预期的代码:
public class MessageResponse<TMessageType>
{}
当我将这个参数绑定到另一个类时,问题就出现了。例如,我创建了一个名为AccountMessageResponse
的类,它将模板参数绑定到一个类调用Account。我希望看到的是一个生成的类,如下所示:
public class AccountMessageResponse : MessageResponse<Account>
{}
但是,不生成任何代码。当我查看代码生成的输出日志时,我看到了这条消息:
'RestModels::AccountMessageResponse' - (Class): no file generated because the 'AppliesToElement' method of the template 'ServiceClassTemplate.t4' evaluated to false.
当前默认模板中不支持模板类型的代码生成吗?这是我需要自己做的事情,还是我做错了什么?
谢谢
当您将模板类型与继承关系组合在一起时,似乎会出现问题。这里有一个变通方法。要达到所需的结果,您需要做的就是:
1)添加一个模板参数,TMessageType,到你的类RequestMessage。这将生成以下内容:
public class RequestMessage<TMessageType>
{}
2)创建一个名为AccountRequestMessage的类。
3)设置AccountRequestMessage的TemplateBinding参数为"RequestMessage"。然后将TemplateBinding类设置为Account。这将在引用AccountRequestMessage的任何地方生成以下内容。例如,如果您有一个返回AccountRequestMessage的操作Foo,将生成以下代码:
public RequestMessage<Account> Foo()
{}
4)如果你需要生成一个实际的类,那么你需要添加一个继承自AccountRequestMessage的新类AccountRequestMessageImpl。这将生成:
public AccountRequestMessageImpl : RequestMessage<Account>
{}
这有点违反直觉,但它比试图修改T4模板更简单。
尼克