首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于模板化类型的Visual Studio2010 T4代码生成

用于模板化类型的Visual Studio2010 T4代码生成
EN

Stack Overflow用户
提问于 2013-05-02 16:00:49
回答 1查看 417关注 0票数 0

我使用默认的T4模板来基于我的UML Model生成代码。我有许多公开模板参数的类。它们会按照预期生成代码。例如,MessageResponse类公开了一个参数TMessageType。这将生成预期的代码:

代码语言:javascript
复制
public class MessageResponse<TMessageType>

{}

当我将这个参数绑定到另一个类时,问题就出现了。例如,我创建了一个名为AccountMessageResponse的类,它将模板参数绑定到一个类调用Account。我希望看到的是一个生成的类,如下所示:

代码语言:javascript
复制
public class AccountMessageResponse : MessageResponse<Account>

{}

但是,不会生成任何代码。当我查看代码生成的输出日志时,我看到以下消息:

代码语言:javascript
复制
'RestModels::AccountMessageResponse' - (Class): no file generated because the 'AppliesToElement' method of the template 'ServiceClassTemplate.t4' evaluated to false.

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-08 15:42:15

当您将模板化类型与继承关系组合在一起时,似乎就会出现问题。这里有一个解决方法。要达到所需的结果,您需要做的全部工作是:

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

代码语言:javascript
复制
public class RequestMessage<TMessageType>
{}

2)创建名为AccountRequestMessage的类。

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

代码语言:javascript
复制
public RequestMessage<Account> Foo()
{}

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

代码语言:javascript
复制
public AccountRequestMessageImpl : RequestMessage<Account>
{}

这有点违反直觉,但它比试图修改T4模板更简单。

尼克

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16333080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档