.NET中如何通過Razor引擎生成這樣的代碼?
01-05
首先要聲明的是:我的不是在做http://asp.net mvc程序,我是在用Razor引擎生成C#代碼。
我想生成的內容是:
public class ProductService{}已知Razor模板的「@Model.Name」的值是「Product」,為了生成「ProductService」,我用以下方式都無法辦到:1.@Model.NameService // 這樣寫顯然不對2.@Model.Name Service // 這樣寫中間又多了個空格 3.@Model.Name&
4.@Model.Name@:Service // 這樣寫也不對然後我只有這樣寫才正確: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
@{@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如何運行單個程序?