Udostępnij za pośrednictwem


Tworzenie niestandardowych procesorów dyrektyw szablonów tekstowych T4

Proces przekształcania szablonu tekstu przyjmuje plik szablonu tekstowego jako dane wejściowe i tworzy plik tekstowy jako dane wyjściowe. Aparat przekształcania szablonu tekstu kontroluje proces, a aparat współdziała z hostem przekształcania szablonu tekstu i co najmniej jednym procesorem dyrektywy szablonu tekstu w celu ukończenia procesu. Aby uzyskać więcej informacji, zobacz Proces przekształcania szablonu tekstu.

Aby utworzyć niestandardowy procesor dyrektywy, należy utworzyć klasę dziedziczą z DirectiveProcessor klasy lub RequiresProvidesDirectiveProcessor.

Różnica między tymi dwoma elementami polega DirectiveProcessor na implementacji interfejsu minimalnego niezbędnego do pobrania parametrów od użytkownika i wygenerowania kodu, który generuje plik wyjściowy szablonu. RequiresProvidesDirectiveProcessor implementuje wzorzec projektu wymaga/zapewnia. RequiresProvidesDirectiveProcessor obsługuje dwa parametry specjalne i requires provides. Na przykład niestandardowy procesor dyrektywy może zaakceptować nazwę pliku od użytkownika, otworzyć i odczytać plik, a następnie zapisać tekst pliku w zmiennej o nazwie fileText. Podklasa RequiresProvidesDirectiveProcessor klasy może przyjmować nazwę pliku od użytkownika jako wartość requires parametru i nazwę zmiennej, w której ma być przechowywany tekst jako wartość parametru provides . Ten procesor otworzy i odczytuje plik, a następnie zapisze tekst pliku w określonej zmiennej.

Przed wywołaniem niestandardowego procesora dyrektywy z szablonu tekstowego w programie Visual Studio należy go zarejestrować.

Aby uzyskać więcej informacji na temat dodawania klucza rejestru, zobacz Wdrażanie niestandardowego procesora dyrektywy.

Dyrektywy niestandardowe

Dyrektywa niestandardowa wygląda następująco:

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

Możesz użyć niestandardowego procesora dyrektywy, jeśli chcesz uzyskać dostęp do danych zewnętrznych lub zasobów z szablonu tekstowego.

Różne szablony tekstu mogą udostępniać funkcje zapewniane przez pojedynczy procesor dyrektywy, dlatego procesory dyrektyw zapewniają możliwość ponownego użycia kodu. include Wbudowana dyrektywa jest podobna, ponieważ umożliwia ona uwzględnianie kodu i udostępnianie go między różnymi szablonami tekstu. Różnica polega na tym, że wszelkie funkcje zapewniane przez include dyrektywę są stałe i nie akceptują parametrów. Jeśli chcesz udostępnić typowe funkcje szablonowi tekstowemu i zezwolić szablonowi na przekazywanie parametrów, musisz utworzyć niestandardowy procesor dyrektywy.

Oto kilka przykładów niestandardowych procesorów dyrektywy:

  • Procesor dyrektywy, który zwraca dane z bazy danych, która akceptuje nazwę użytkownika i hasło jako parametry.

  • Procesor dyrektywy służący do otwierania i odczytywania pliku, który akceptuje nazwę pliku jako parametr.

Główne części niestandardowego procesora dyrektywy

Aby opracować procesor dyrektywy, należy utworzyć klasę dziedziczą z DirectiveProcessor klasy lub RequiresProvidesDirectiveProcessor.

Najważniejsze DirectiveProcessor metody, które należy zaimplementować, są następujące.

  • bool IsDirectiveSupported(string directiveName) - Zwróć, true jeśli procesor dyrektywy może poradzić sobie z nazwaną dyrektywą.

  • void ProcessDirective (string directiveName, IDictionary<string, string> arguments) - Aparat szablonu wywołuje tę metodę dla każdego wystąpienia dyrektywy w szablonie. Procesor powinien zapisać wyniki.

Po wszystkich wywołaniach metody ProcessDirective() aparat tworzenia szablonów wywoła następujące metody:

  • string[] GetReferencesForProcessingRun() — Zwraca nazwy zestawów, których wymaga kod szablonu.

  • string[] GetImportsForProcessingRun() — Zwraca przestrzenie nazw, których można użyć w kodzie szablonu.

  • string GetClassCodeForProcessingRun() — Zwraca kod metod, właściwości i innych deklaracji, których może używać kod szablonu. Najprostszym sposobem na wykonanie tej czynności jest utworzenie ciągu zawierającego kod C# lub Visual Basic. Aby procesor dyrektywy mógł być wywoływany z szablonu korzystającego z dowolnego języka CLR, można skonstruować instrukcje jako drzewo CodeDom, a następnie zwrócić wynik serializacji drzewa w języku używanym przez szablon.

  • Aby uzyskać więcej informacji, zobacz Przewodnik: tworzenie niestandardowego procesora dyrektywy.