0

我正在使用默认的 T4 模板来生成基于我的 UML 模型的代码。我有许多公开模板参数的类。这些按预期生成代码。例如,MessageResponse该类公开了一个 Parameter 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.

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

谢谢

4

1 回答 1

0

It seems the problem occurs when you combine templated types with an inheritance relationship. Here is a workaround. To achieve the results required all you need to do is:

1) Add a template parameter, TMessageType, to your class RequestMessage. This will generate the following:

public class RequestMessage<TMessageType>
{}

2) Create a class called AccountRequestMessage.

3) Set the TemplateBinding parameter for AccountRequestMessage to 'RequestMessage'. Then set the TemplateBinding class to 'Account'. This will then generate the following wherever you have referenced AccountRequestMessage. For example if you have an operation Foo which returns AccountRequestMessage the following code will be generated:

public RequestMessage<Account> Foo()
{}

4) If you need to generate an actual class you then need to add a new class AccountRequestMessageImpl which inherits from AccountRequestMessage. This will generate:

public AccountRequestMessageImpl : RequestMessage<Account>
{}

This is a little counter intuitive but it is simpler than trying to modify the T4 templates.

Nick

于 2013-05-08T07:42:14.547 回答