.NET中如何通過Razor引擎生成這樣的代碼?

首先要聲明的是:我的不是在做http://asp.net mvc程序,我是在用Razor引擎生成C#代碼。

我想生成的內容是:

public class ProductService

{

}

已知Razor模板的「@Model.Name」的值是「Product」,為了生成「ProductService」,我用以下方式都無法辦到:

1.@Model.NameService // 這樣寫顯然不對

2.@Model.Name Service // 這樣寫中間又多了個空格

3.@Model.Name&Service& // 這樣寫會直接吧&標籤輸出

4.@Model.Name@:Service // 這樣寫也不對

然後我只有這樣寫才正確:

@{string className = @Model.Name + "Service";}@className

這樣寫顯然很麻煩,那有沒有簡單的辦法生成「ProductService」?

類似的,如何生成一下代碼:

Product.Add()

AddProduct()


這個事情我大概10年前做過,然後,我一直認為這是我做過最愚蠢的事情之一。

Razor模板依賴於方括弧去區別代碼與邏輯,可以認為它是為html這樣風格語言而做了特殊優化,而如果用在c#源碼的話,這種特殊優化就變成了特殊障礙。

要生成c#代碼的話,請用T4:https://en.wikipedia.org/wiki/Text_Template_Transformation_Toolkit


@{@Model.Name}Service

@(Model.Name)Service

Product.Add():

@{@Model.Name}.Add()

@(Model.Name).Add()

AddProduct():

Add@{@Model.Name}()

Add@(Model.Name)()


@(Model.Name)Service可以嗎?


@(Model.Name + "Service")

不行嗎?


請用T4


不答題,就提個醒,手動拼接的字元串作為指令來執行,一定要當心被注入的危險。


如果不是非要用Razor不可的話,建議使用Roslyn


要生成c#模板為什麼不用t4模板工具?反正你不寫mvc


很久以前用CodeDom做過,語法是&<% %&>


推薦閱讀:

作為 .Net 開發人員,我們為什麼要學習 CLR?
程序員自測程序時一般會填寫哪些有意思的資料?
vs2015編譯出現拒絕訪問的問題.該怎麼解決?
各位前輩,請問在開發App時,您們是怎麼設計自己的類的?
IntelliJ IDEA如何運行單個程序?

TAG:編程 | NET | ASPNET | C# | ASPNETMVC |