T4 template

Co to jest T4 template

W internecie z łatwością można znaleźć opisy czym jest T4, pochodzące od mądrzejszych ludzi niż ja, więc tylko pokrótce przedstawię temat.

T4 template jest to kod, który generuje plik z kodem (lub też z jakikolwiek tekstem), który będzie dołączony do solucji.
Pisząc template posługujemy się blokami tekstu pomieszanymi z logiką.
Ten kod wygeneruje nam klasę, która w nazwie będzie miała numer dzisiejszego dnia.

Świetnym przykładem wykorzystania T4 jest T4MVC, która dla projektu ASP.NET MVC generuje klasy ze strukturą kontrolerów, widoków i area, tak by w kodzie nie posługiwać się magic stringami.

T4 w Ilaro.Admin

Pisząc poprzedni post zauważyłem, że mam klasę, która mogłaby być zastąpiona przez T4. W klasie Template mam zapisane listę widoków z folderów DisplayTemplates, EditorTemplates i FilterTemplates.

Czyli musiałem pozyskać listę plików z tych folderów. Na początek ustawiłem by template był host specific, co pozwala się dostać do zmiennej this.Host typu ITextTemplatingEngineHost.

Ze zmiennej Host pozyskałem informacje o tym w jakim folderze znajduje się template. Mając tą informacje mogłem utworzyć ścieżkę do folderu Shared z widokami w area IlaroAdmin.

Mając tą ścieżkę, pobrałem wszystkie foldery kończące się słowem „Templates”, tak by w przyszłości jeśli dojdą inne typy templates żeby były od razu dodane do tej klasy.
Następnie dla każdego folderu pobrałem wszystkie pliki kończące się na „Partial.cshtml”. W folderach templates, mój schemat nazewnictwa jest własnie taki by pliki kończyły się słowem „Partial”. Dodatkowo musiałem filtrować je ze względu na typ ponieważ każdy widok jest kompilowany, czyli tworzy się plik o tej samej nazwie tylko z rozszerzeniem „.cs”.

Dodatkowo zrobiłem przekształcenia na nazwach folderów i plików tak by ostateczne nazwy klas i zmiennych wyglądały lepiej. Z nazw folderów wyciąłem słowo „Templates”, a z nazw plików słowo „Partial” i rozszerzenie.
Mając już zbudowaną kolekcje widoków użyłem ją w ten sposób:

co wygenerowało mi taki kod:

Pełny kod mojego template można znaleźć tutaj: Templates.tt.

Na początku myślałem, że mój template nie będzie bardzo przydatne, że jest to tylko pretekst żeby zrobić coś „innego”. Okazało się, że w klasie Templates miałem już kilka nieistniejących już nazw plików, więc już na samym początku Templates.tt okazało się użyteczne.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *