2013-05-02 121 views
0

我使用默認的T4模板來基於我的UML模型生成代碼。我有許多暴露模板參數的類。這些按預期生成代碼。例如MessageResponse類暴露了參數TMessageType。這將生成代碼如期:Visual Studio 2010用於模板類型的T4代碼生成

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. 

是代碼生成模板類型不在當前默認模板支持?這是我需要自己做的事,還是我做錯了什麼?

感謝

回答

0

好像當你把模板類型的繼承關係出現問題。這是一種解決方法。要實現所需的結果,您需要做的是:

1)將模板參數TMessageType添加到您的類RequestMessage中。這將生成以下內容:

public class RequestMessage<TMessageType> 
{} 

2)創建一個名爲AccountRequestMessage的類。

3)將AccountRequestMessage的TemplateBinding參數設置爲'RequestMessage'。然後將TemplateBinding類設置爲「Account」。然後,無論您何時引用AccountRequestMessage,都會生成以下內容。例如,如果您有將生成下面的代碼的操作符返回AccountRequestMessage:

public RequestMessage<Account> Foo() 
{} 

4)如果你需要生成一個實際的類,那麼你需要添加一個新的類AccountRequestMessageImpl從AccountRequestMessage繼承。這將產生:

public AccountRequestMessageImpl : RequestMessage<Account> 
{} 

這是一個小直覺,但它比試圖修改T4模板簡單。

尼克

相關問題