以前寫codeSmith模板的時候,如果直接像asp一樣混排編寫的話,代碼輸出來codeSmith中,不知道怎麼儲存到檔案,後來把所有要輸出的模板文字都用stringBuiler串接起來然後IO到檔案中,但是這樣codesmith寫起來太麻煩,介面高亮以及智能提示都不理想,所以非常的亂,而且沒法一下子把所有的類的模板一次性產生(全寫在一個裡面太亂,不便管理,以及以後只需產生一部分時也沒法單獨產生),但看codeSimth裡面的例子之後,發現別人的模板都是一個一個獨立開的,通過一個主模板產生方案,要單個產生就用單個模板去產生好了,於是花了點時間看了下NetTiers的產生方法,終於找到了眉目,在這裡發出來給還沒有解決這個問題的朋友一個參考!
第一步:接下來把你要用來產生的子模板註冊到主模板中去,代碼很簡單,如下:
<%@ Register Name="MyEntityClass" Template="C:\MyEntityClass.cst" MergeProperties="False" ExcludeProperties="" %>
Name="MyEntityClass" 模板好像會被註冊成一個CodeTemplate的衍生類別,MyEntityClass會是這個類的名字;
C:\MyEntityClass.cst為你模板的位置,相對位置也可以;
第二步:為模板添加屬性
當然,我們獨立的子模板出會有屬性需要設定,這個地方可以利用反射來賦值,代碼如下:
CodeTemplate codeTemplate=new MyEntityClassKey();
codeTemplate.SetProperty("IncludeGet", IncludeGet);
codeTemplate.SetProperty("IncludeFind", IncludeFind);
codeTemplate.SetProperty("IncludeSave", IncludeSave);
上面的IncludeGet,IncludeFind就是模板C:\MyEntityClass.cst的一些屬性了!後面就是為其設定的值了!
第三步:輸出檔案
codeTemplate.RenderToFile("c:/3.txt", true);
搞定!後面參數,第一個是輸出的地址,第二個是是否覆蓋!
還有好多的重載,我就不提了!自己可以慢慢看!
這個功能有什麼用呢?當然有用啦,我們寫好一系列的模板之後,一個一個去產生那不太累了,而且參數設定來設定去,都差不多,有了這個功能
我可以將它們一次產生出來,簡單省事!
好的,到這一步為止,就簡單的把NetTiers的模板產生給偷過來了!如果對codesmith不太瞭解的朋友,可以參考園子裡其它前輩的相關教程