模板类型的Visual Studio 2010 T4代码生成



我使用默认的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模板更简单。

尼克

最新更新