成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解模版引擎XTemplate與代碼生成器XCode(源碼)

移動開發 iOS
模版引擎XTemplate與代碼生成器XCode是本文要介紹的內容,主要是來學習模版引擎XTemplate是一個仿T4設計的引擎,功能上基本與T4一致,來看詳細內容。

模版引擎XTemplate與代碼生成器XCode是本文要介紹的內容,主要是來學習模版引擎XTemplate是一個仿T4設計的引擎,功能上基本與T4一致(模版語法上完全兼容T4,模版頭指令部分兼容)。

自己設計模版引擎,就是為了代碼生成器、網站模版、郵件模版等多種場合,也就是要能拿出來單獨使用、功能強大并且容易控制的。T4是個很好的引擎,但是它的設計基本上傾向于vs,幾乎不顧別的場合。

XTemplate特點如下:

1、完全使用C#作為模版語言。跟ASP、ASP.Net頁面的解析一樣,把<##>標簽外的文本內容當作字符串,用一個StringBuilder,標簽內作為C#原生代碼,拼在一起編譯,進行模版替換時,實質上就是執行編譯后的程序集,這就是XTemplate的核心原理!網絡上現有的許許多多模版引擎,要么采用標簽替換,要么自創模版語言,這些都增加了使用者的學習難度。XTemplate使用C#作為模版語言,這個世界安靜了!

2、支持“調試”。不是運行時調試,而是XTemplate能夠把模版編譯的中間類文件以及程序集等輸出,方便檢查錯誤。如果把模版編譯后的程序集保存下來,可以在沒有模版文件的情況下直接使用模版功能。

3、不需要ASP.Net支持。有部分模版引擎,是模擬一個ASP.Net服務器,然后以ASP.Net作為模版來實現,這就要求有一個ASP.Net服務器作為宿主,限制了模版引擎的使用范圍。

4、支持批量編譯。可以把多個模版放入模版處理器,進行一次編譯(所有模版類都編譯到一個程序集里面去)。

5、支持類成員。模版內容默認情況下將會統一編譯到一個類的Render方法里面去,但是有時候我們需要給這個類增加一些屬性和方法,此時可以使用<#! #>標簽,序數為單數表示開始,序數為偶數表示結束,所以不限制類成員代碼的位置(T4要求只能寫在模版的***面)。

6、支持自定義基類。默認情況下,所有編譯生成的模版類都繼承自TemplateBase,你也可以創建自己的模版基類,然后在模版頭通過指令,或者通過外部宿主指定自定義的模版基類,模版中可以直接使用自定義模版基類的成員(因為繼承嘛),比如代碼生成器XCode中的XCodeBase。

7、自動引用宿主程序集。T4在使用上***的麻煩就是引用外部程序集和命名空間,畢竟不是在vs里面編寫C#代碼。XTemplate在編譯的時候,自動引用宿主(就是調用者,比如XCode)的所有應用程序集,同時引用大部分常用的明明空間,因為這樣,生成的類很臃腫,但是編譯的時候,編譯器會自動去掉無用的引用。XTemplate從完成到現在為止,還沒有用過引用程序集和命名空間的問題,因為一般來說,模版中需要用到的程序集,宿主里面一般都有用到,非常符合我們的使用習慣。

8、與宿主的良好交互。在XTemplate中,編譯的模版程序集是直接加載在默認域,這點與T4不同,T4會新建一個域,應該是為了防止模版代碼弄臟默認域的數據吧(比如干擾vs運行)。因為在同一個域,XTemplate與宿主進行交互,就不需要“***”(跨域)了。XTemplate的處理過程分為分析、編譯和執行三步,都可以由外部控制,比如有時候我們只是需要檢查一下模版的語法,只需要檢查一下模版語法是否正確,這個時候編譯一下就可以了。

9、更多的特點需要大家來發現!

XCode使用XTemplate代碼(后面有XCode的項目代碼):

  1. Dictionary<String, Object> data = new Dictionary<string, object>();  
  2. data["Config"] = Config;  
  3. data["Tables"] = Tables;  
  4. data["Table"] = table;  
  5.  
  6. // 聲明模版引擎  
  7. Template tt = new Template();  
  8. Template.Debug = Config.Debug;  
  9. foreach (String item in ss)  
  10. {  
  11.     if (item.EndsWith("scc", StringComparison.Ordinal)) continue;  
  12.  
  13.     String tempFile = item;  
  14.     if (!Path.IsPathRooted(tempFile) && !tempFile.StartsWith(TemplatePath, StringComparison.OrdinalIgnoreCase))  
  15.         tempFile = Path.Combine(TemplatePath, tempFile);  
  16.  
  17.     String content = File.ReadAllText(tempFile);  
  18.  
  19.     // 添加文件頭  
  20.     if (Config.UseHeadTemplate && !String.IsNullOrEmpty(Config.HeadTemplate))  
  21.         content = Config.HeadTemplate + content;  
  22.  
  23.     tt.AddTemplateItem(item, content);  
  24. }  
  25. tt.Process();  
  26.  
  27. // 編譯模版  
  28. tt.Compile();  
  29.  
  30. List<String> rs = new List<string>();  
  31. foreach (String item in ss)  
  32. {  
  33.     if (item.EndsWith("scc", StringComparison.Ordinal)) continue;  
  34.  
  35.     //String content = RenderFile(table, item, data);  
  36.     String content = tt.Render(item, data);  
  37.  
  38.     // 計算輸出文件名  
  39.     String fileName = Path.GetFileName(item);  
  40.     String className = CutPrefix(table.Name);  
  41.     className = FixWord(className);  
  42.     String remark = table.Description;  
  43.     if (String.IsNullOrEmpty(remark)) remark = ENameToCName(className);  
  44.     if (Config.UseCNFileName && !String.IsNullOrEmpty(remark)) className = remark;  
  45.     fileNamefileName = fileName.Replace("類名", className).Replace("類說明", remark).Replace("連接名", Config.EntityConnName);  
  46.  
  47.     fileName = Path.Combine(OuputPath, fileName);  
  48.     File.WriteAllText(fileName, content, Encoding.UTF8);  
  49.  
  50.     rs.Add(content);  

XTemplate設計圖(我喜歡先做圖再編碼)單擊放大:

模版引擎XTemplate與代碼生成器XCoder

小結:詳解模版引擎XTemplate與代碼生成器XCode(源碼)的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: CSDN博客
相關推薦

2017-03-20 17:49:21

Java Web模板代碼

2015-08-25 15:54:17

程序員代碼生成器

2021-07-23 11:24:54

Create Inc開源G代碼生成器

2023-05-17 16:02:00

CSS工具代碼生成器

2023-01-06 07:52:52

代碼生成器開發

2024-11-01 15:51:06

2020-10-20 09:53:11

代碼IDEA生成器

2021-10-29 11:25:41

代碼編程語言Java

2012-03-30 09:31:44

WEBCSS

2021-12-10 09:45:19

生成器配置代碼

2015-08-25 11:07:58

2017-07-01 16:02:39

分布式ID生成器

2025-01-23 08:36:27

CSS開發工具

2011-12-23 13:42:05

JavaScript

2010-09-07 16:31:17

SQL語句insert

2021-04-22 21:15:38

Generator函數生成器

2024-06-12 13:40:58

2009-07-03 09:29:24

KeelKit

2022-03-10 10:48:30

PolyCoder自動代碼生成器語言

2015-04-22 09:36:27

JAVA代碼生成器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区免费视频 | 午夜精品久久久久久久久久久久久 | 中国美女撒尿txxxxx视频 | 一区二区三区在线播放 | 天堂在线网| 日本在线看片 | 黄色成人免费看 | 欧美综合在线观看 | 亚洲视频一区在线播放 | 91麻豆精品国产91久久久久久久久 | 色接久久 | 亚洲人成人一区二区在线观看 | 国产美女永久免费无遮挡 | 天天干夜夜操 | 四虎影院一区二区 | 亚洲综合在线视频 | 日韩精品一区二区三区四区 | www.日韩| 91色网站 | 亚洲 91| h在线免费观看 | 精品久久久久久亚洲综合网 | 精品国产欧美 | 日韩有码在线观看 | 一区二区三区福利视频 | 91麻豆精品国产91久久久更新资源速度超快 | 91国产精品 | 一级看片免费视频 | 亚洲成人一区二区三区 | 亚洲国产一区二区三区 | 亚洲一区二区av | 国产四虎 | 亚洲 欧美 精品 | 欧美日一区二区 | 国产精品久久久久久久久久免费看 | 亚洲有码转帖 | av香蕉 | av黄色在线 | 日韩最新网站 | 日韩一级免费看 | 天天综合网7799精品 |