我使用默认的T4模板来基于我的UML Model生成代码。我有许多公开模板参数的类。它们会按照预期生成代码。例如,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.当前默认模板是否不支持模板化类型的代码生成?这是我需要自己做的事情,还是我做错了什么?
谢谢
发布于 2013-05-08 15:42:15
当您将模板化类型与继承关系组合在一起时,似乎就会出现问题。这里有一个解决方法。要达到所需的结果,您需要做的全部工作是:
1)在您的RequestMessage类中添加模板参数TMessageType。这将生成以下内容:
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模板更简单。
尼克
https://stackoverflow.com/questions/16333080
复制相似问题