共用方式為


建立自訂 T4 模板文本指令處理器

文字範本轉換程序會以文字範本檔案作為輸入,並產生文字檔案作為輸出。 文字範本轉換引擎會控制程序,而引擎會與文字範本轉換主機及一或多個文字範本指引處理器互動,以完成程序。 如需詳細資訊,請參閱文字 範本轉換程序

若要建立自訂指引處理器,您可以建立繼承自 DirectiveProcessorRequiresProvidesDirectiveProcessor的類別。

這兩者之間的差異在於 DirectiveProcessor 實作從使用者取得參數及產生產生範本輸出檔案的程式碼所需的最小介面。 RequiresProvidesDirectiveProcessor 實現需求/提供設計模式。 RequiresProvidesDirectiveProcessor 處理兩個特殊參數, requires 以及 provides。 例如,自訂指引處理器可能會接受使用者的檔名,開啟並讀取檔案,然後將檔案的文字儲存在名為 fileText的變數中。 類別的 RequiresProvidesDirectiveProcessor 子類別可能會從使用者中取得檔案名稱作為參數的 requires 值,並將儲存文字的變數名稱作為參數的 provides 值。 此處理器會開啟並讀取檔案,然後將檔案的文字儲存在指定的變數中。

在從 Visual Studio 中的文字範本呼叫自訂指示詞處理器之前,您必須先註冊它。

如需如何新增登錄機碼的詳細資訊,請參閱 部署自訂指示詞處理器

自訂指令

自訂指令如下所示:

<#@ MyDirective Processor="MyDirectiveProcessor" parameter1="value1" ... #>

當您想要從文字範本存取外部資料或資源時,可以使用自訂指引處理器。

不同的文字範本可以共用單一指引處理器所提供的功能,因此指引處理器提供一種方式來分解程式碼以供重複使用。 內建 include 指令類似,因為您可以使用它來分解程式碼並在不同的文字範本之間共用。 不同之處在於,指令提供的任何功能 include 都是固定的,不接受參數。 如果您想要為文字範本提供一般功能,並允許範本傳遞參數,則必須建立自訂指引處理器。

自訂指引處理器的一些範例可能是:

  • 從接受使用者名稱和密碼作為參數的資料庫傳回資料的指引處理器。

  • 用於開啟和讀取接受檔案名稱作為參數的檔案的指引處理器。

自訂指引處理器的主要部分

若要開發指引處理器,您必須建立繼承自 DirectiveProcessorRequiresProvidesDirectiveProcessor的類別。

您必須實作的最重要 DirectiveProcessor 方法如下。

  • bool IsDirectiveSupported(string directiveName) - 若您的指引處理器可以處理指名指引,則傳回 true

  • void ProcessDirective (string directiveName, IDictionary<string, string> arguments) - 範本引擎會針對範本中每次出現的指引呼叫這個方法。 您的處理器應該保存結果。

在所有呼叫 ProcessDirective() 之後,範本引擎會呼叫下列方法:

  • string[] GetReferencesForProcessingRun() - 傳回範本程式碼所需的元件名稱。

  • string[] GetImportsForProcessingRun() - 傳回範本程式碼中可使用的命名空間。

  • string GetClassCodeForProcessingRun() - 傳回範本程式碼可以使用的方法、屬性和其他宣告的程式碼。 執行此操作的最簡單方法是建置包含 C# 或 Visual Basic 程式碼的字串。 若要讓指示詞處理器能夠從使用任何 CLR 語言的範本呼叫,您可以將陳述式建構為 CodeDom 樹狀結構,然後傳回以範本所使用的語言序列化樹狀結構的結果。

  • 如需詳細資訊,請參閱 操作指南:建立自訂指示詞處理器