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

时间:2013-05-02 08:00:49

标签: visual-studio-2012 code-generation t4 uml

我使用默认的T4模板根据我的UML模型生成代码。我有许多暴露模板参数的类。这些按预期生成代码。例如,MessageResponse类公开了TMessageType的参数。这会按预期生成代码:

public class MessageResponse<TMessageType>

{}

当我将此参数绑定到另一个类时,会出现问题。例如,我创建了一个名为AccountMessageResponse的类,它将模板参数绑定到类调用帐户。我期望看到的是生成的类如下:

public class AccountMessageResponse : MessageResponse<Account>

{}

但是,没有生成代码。当我查看代码生成的输出日志时,我看到了以下消息:

'RestModels::AccountMessageResponse' - (Class): no file generated because the 'AppliesToElement' method of the template 'ServiceClassTemplate.t4' evaluated to false.

当前默认模板中是否不支持模板化类型的代码生成?这是我自己需要做的事情,还是我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

当您将模板化类型与继承关系组合时,似乎会出现问题。这是一个解决方法。要获得所需的结果,您只需要:

1)将模板参数TMessageType添加到您的RequestMessage类中。这将生成以下内容:

public class RequestMessage<TMessageType>
{}

2)创建一个名为AccountRequestMessage的类。

3)将AccountRequestMessage的TemplateBinding参数设置为“RequestMessage”。然后将TemplateBinding类设置为“Account”。这将在您引用AccountRequestMessage的任何位置生成以下内容。例如,如果您有一个返回AccountRequestMessage的操作Foo,则将生成以下代码:

public RequestMessage<Account> Foo()
{}

4)如果你需要生成一个实际的类,那么你需要添加一个新的AccountRequestMessageImpl类,它继承自AccountRequestMessage。这将生成:

public AccountRequestMessageImpl : RequestMessage<Account>
{}

这有点直观,但比尝试修改T4模板更简单。

尼克