開源代碼生成器MyGeneration使用(三) 重要API和指令介紹

我們先看看Template Code的父類代碼:
public abstract class _DotNetScriptTemplate
{
	protected ZeusTemplateContext context;
	protected ZeusInput input;
	protected ZeusOutput output;
	protected Hashtable objects;

	public _DotNetScriptTemplate(ZeusTemplateContext context)
	{
		this.input = context.Input;
		this.objects = context.Objects;
		this.output = context.Output;
	}

	public abstract void Render();
}

public abstract class DotNetScriptTemplate : _DotNetScriptTemplate
{
	protected Zeus.UserInterface.GuiController ui;
	protected MyMeta.dbRoot MyMeta;
	protected Dnp.Utils.Utils DnpUtils;
	public DotNetScriptTemplate(IZeusContext context) : base(context)
	{
		this.ui = context.Objects["ui"] as Zeus.UserInterface.GuiController;
		this.MyMeta = context.Objects["MyMeta"] as MyMeta.dbRoot;
		this.DnpUtils = context.Objects["DnpUtils"] as Dnp.Utils.Utils;
	}
}

上面兩個類的可繼承變量可以說是整個模板編寫的基礎。以下是重要API的介紹:

MyMeta Namespace:

dbRoot類屬性 public IDatabases Databases{get;} //取得數據庫集合
dbRoot類屬性 public IDatabase DefaultDatabase{get;} //缺省數據庫,也就是在連接字符串中定義的數據庫
IDatabase接口,數據庫的抽象。其中重要的屬性有Name(數據庫名),Alias(別名),Tables(數據庫內表集合),Views(數據庫內視圖集合)
ITable接口,數據表的抽象。重要屬性有Name(表名),Alias(別名),Columns(數據列集合),ForeignKeys(外鍵集合),PrimaryKeys(主鍵集合),Indexes(索引集合),Database(所在數據庫)
IColumn接口,數據列抽象。列的屬性字段都比較重要

Zeus Namespace:(注Zeus是在PluginInterfaces.dll這個程序集裏)

ZenusInput類,是一個類似hashtable的數據窗口,主要用於獲取用戶界面輸入。如獲取控件TextBox的值input["textBoxID"],這裏的input定義在_DotNetScriptTemplate類中protected ZeusInput input;
   同時還存儲了一些應用程序變量如input["defaultOutputPath"]缺省輸出路徑,其他請請看API。
ZeusOutput類,是一個輸出緩存區,所有的不在<%%>內的字符,write()方法都是輸出到這個緩存區。重要方法:
  write(String str)    輸出字符串,writeln(String str)輸出字符串並換行;
  autoTab(String str)   輸出字符串前面自動加上製表符tab,該tab個數由屬性tabLevel決定。autoTabLn(String str) ;
  save(String path,Object action)   保存緩存區裏的內容到文件,參數action可選值有 "d"如果文件不存在則保存,“o”保存文件如果已存在則覆蓋

   ,“b”保存文件如果已存在則備份後再覆蓋,“a”保存文件如果已存在則追加到文件;
  saveEnc(String path,Object action,Object encoding)   同上方法,只是多加了個編碼參數;
  append(String path)   相當於save(String path,"a");
  clear()   清除緩存區裏的內容;

ZeusOutpu類只有兩個屬性,tabLevel表示當前製表符的個數, output.tabLevel++即製表符加一,text設置或者取得緩存區的字符串。

Zeus.UserInterface Namespace:

該命令空間內封裝了基礎的winform控件,如GuiButton,GuiCheckBox,GuiTextBox等。這裏不一一介紹了。
GuiControlller類,定義了一系統添加控件的方法,如AddButton,AddTextBox等。

瞭解了這些API,再去看上面兩個類代碼,能更深入的瞭解模板的編寫。

我們再來看看MyGeneration指令吧

<%#FILE codeInclude.cs%>    包含指令;
<%#REFERENCE MyCustomAssembly.dll,System.Windows.Forms.dll%>    引用指令,就是要引用的程序集dll文件,dll文件可以是與Mygeneration.exe在一個目錄或者放在GAC裏;
<%#NAMESPACE System.IO,System.Text%>    引入命名空間,也就是C#裏的using了;
<%#DEBUG%>    調試指令,放在模板的第一行而且必須是<%#DEBUG%><%
  這樣的不能有空格,再在Render方法裏調用System.Diagnostics.Debugger.Launch()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章