2012-09-13 106 views
1

我動態創建類和變量名,我的代碼塊中。例如:如何從嵌套模板塊中生成T4模板中的代碼塊?

if (new<#=et.Name#> == null) 

一個實體模型命名的網站,這會產生:

if (newSite == null) 

但我想要做的是評估項目的類型,然後根據該類型生成代碼。對於我的特定目的,我想編寫一段代碼,根據該實體的鍵值的數據類型即時創建新的主鍵。所以,我想要做這樣的事情在我的模板:

<#if (new<#=et.Name#>.<#=primaryKey.Name#>.GetType() == typeof(Guid)) {#> 
    if (new<#=et.Name#>.<#=primaryKey.Name#> == Guid.Empty) 
     new<#=et.Name#>.<#=primaryKey.Name#> = Guid.NewGuid(); 
<#} #> 

名爲網站的實體模型,隨後生成的代碼應該是這樣的:

if (newSite.SiteKey == Guid.Empty) 
    newSite.SiteKey = Guid.NewGuid(); 

這在邏輯上看起來好像它會工作。但是,我一直無法找到正確的語法來嵌套模板塊,並對這些值進行評估,然後將其置於條件內。注意嵌套在語句塊中的表達式塊。因此,上面的代碼生成示例不起作用,因爲Visual Studio抱怨語法的各種問題。

想法?

+0

這是不大可能奏效使用這一招。原因之一是模板可用的類型不一定適用於生成的代碼,反之亦然。更好的是,如果你模型化對象並暴露像IsPrimaryKey這樣的模板,然後在模板中進行測試。意圖也更清楚。 – FuleSnabel

回答