Sdílet prostřednictvím


Vytváření vlastních procesorů pro direktivy textových šablon T4

Proces transformace textové šablony přebírá jako vstup soubor textové šablony a jako výstup vytvoří textový soubor. Transformační modul textové šablony řídí proces a modul komunikuje s hostitelem transformace textové šablony a jedním nebo více procesory direktiv textových šablon pro dokončení procesu. Další informace naleznete v tématu Proces transformace textové šablony.

Chcete-li vytvořit vlastní procesor direktiv, vytvoříte třídu, která dědí z nebo DirectiveProcessor RequiresProvidesDirectiveProcessor.

Rozdíl mezi těmito dvěma je, že DirectiveProcessor implementuje minimální rozhraní, které je nezbytné pro získání parametrů od uživatele a vygenerování kódu, který vytvoří výstupní soubor šablony. RequiresProvidesDirectiveProcessor implementuje vzor návrhu požadavků nebo poskytuje. RequiresProvidesDirectiveProcessor zpracovává dva speciální parametry requires a provides. Například vlastní procesor direktiv může přijmout název souboru od uživatele, otevřít a přečíst soubor a potom uložit text souboru do proměnné s názvem fileText. Podtřída RequiresProvidesDirectiveProcessor třídy může jako hodnotu requires parametru převzít název souboru od uživatele a název proměnné, do které se má text uložit jako hodnota parametru provides . Tento procesor by soubor otevřel a přečetl a pak uložil text souboru do zadané proměnné.

Před voláním vlastního procesoru direktiv z textové šablony v sadě Visual Studio ho musíte zaregistrovat.

Další informace o tom, jak přidat klíč registru, naleznete v tématu Nasazení vlastního procesoru direktiv.

Vlastní direktivy

Vlastní direktiva vypadá takto:

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

Pokud chcete získat přístup k externím datům nebo prostředkům z textové šablony, můžete použít vlastní procesor direktiv.

Různé textové šablony můžou sdílet funkce, které poskytuje jeden procesor direktiv, takže procesory direktiv poskytují způsob, jak využít kód pro opakované použití. Předdefinovaná include direktiva je podobná, protože ji můžete použít k vyvázení kódu a jejich sdílení mezi různými textovými šablonami. Rozdíl je v tom, že všechny funkce, které direktiva poskytuje, include jsou pevné a nepřijímají parametry. Pokud chcete textové šabloně poskytnout běžné funkce a umožnit šabloně předávat parametry, musíte vytvořit vlastní procesor direktiv.

Příklady procesorů vlastních direktiv můžou být:

  • Zpracovatel direktiv pro vrácení dat z databáze, která přijímá uživatelské jméno a heslo jako parametry.

  • Procesor direktiv pro otevření a čtení souboru, který přijímá název souboru jako parametr.

Hlavní části vlastního procesoru direktiv

Chcete-li vyvíjet procesor direktiv, musíte vytvořit třídu, která dědí z nebo DirectiveProcessor RequiresProvidesDirectiveProcessor.

Nejdůležitější DirectiveProcessor metody, které musíte implementovat, jsou následující.

  • bool IsDirectiveSupported(string directiveName) - Vrátí, true pokud procesor direktiv dokáže zpracovat pojmenovanou direktivu.

  • void ProcessDirective (string directiveName, IDictionary<string, string> arguments) - Modul šablony volá tuto metodu pro každý výskyt direktivy v šabloně. Procesor by měl výsledky uložit.

Poté, co všechna volání ProcessDirective() modul šablony bude volat tyto metody:

  • string[] GetReferencesForProcessingRun() – Vrátí názvy sestavení, která vyžaduje kód šablony.

  • string[] GetImportsForProcessingRun() – Vrátí obory názvů, které lze použít v kódu šablony.

  • string GetClassCodeForProcessingRun() - Vrátí kód metod, vlastností a dalších deklarací, které může kód šablony použít. Nejjednodušším způsobem je vytvořit řetězec obsahující kód jazyka C# nebo Visual Basic. Aby byl procesor direktiv schopný volat ze šablony, která používá libovolný jazyk CLR, můžete vytvořit příkazy jako strom CodeDom a pak vrátit výsledek serializace stromu v jazyce používaném šablonou.

  • Další informace naleznete v tématu Návod: Vytvoření vlastního procesoru direktiv.