12.04.2011
22:01

T4 Parameter Templates mit dynamischen Parametertypen

In meinen Projekten favorisiere ich mittlerweile den T4-Ansatz unter Verwendung von Parameter-Templates, die mit Hilfe von Metadaten für die Erstellung des Codes verantwortlich sind. Das Haupttemplate (Treiber) hat die Aufgabe die Daten aufzubereiten und ein Metadaten-Objekt an das Parameter-Template zu übergeben. Der Vorteil dieses Ansatzes, ich kann die aufbereiteten Metadaten dazu nutzen, um Konfigurations- und Codedateien zu erstellen, die Logik ist verständlicher, der Austausch ist einfacher und ich erspare mir Redundanzen, da Verarbeitung und Ausgabe getrennt sind. Mit diesem Ansatz eine WCF-Infrastruktur aufzubauen ist sehr praktisch ;-)

Bei kleineren Projekten finde ich es jedoch überdimensioniert, die typisierten Metaklassen in einer eigenen Assembly zu packen, sondern möchte diese im Class-Feature Block des Haupttemplates definieren.

Folgende Abbildung verdeutlicht dies:

Abbildung 1
Abbildung 1 Haupttemplate mit der definierten Klasse für die Metadaten im Class-Feature Block

Die im Class-Feature Block definierte Klasse lässt sich jedoch nicht als Parameter-Typ verwenden. Der Versuch führt zu folgendem Fehler:

Kompilierte Transformation: Der Typ- oder Namespacename "MetadataObject" konnte im globalen Namespace nicht gefunden werden. (Fehlt ein Assemblyverweis?)

Aus diesem Grund ist der Umweg über eine eigene Assembly notwendig. Eine Alternative wäre aber auch der Einsatz des System.Object-Typs als Parameter und das Casting auf den Datentyp dynamic.

Abbildung 2
Abbildung 2 Aufbau des Parameter Templates, damit die Klasse aus der Hauptvorlage verwendet werden kann.

Durch die späte Bindung wird der Aufruf der Eigenschaften ohne Fehlermeldung möglich. Der einzige Nachteil, man muss auf die IntelliSense verzichten, wenn man einen T4-Editor einsetzt. Zudem wird zusätzlich noch eine Referenz auf die Assembly Microsoft.CSharp.dll im Parameter Template benötigt.

Wird mit dieser Vorgehensweise das Haupttemplate ausgeführt, habe ich folgendes Ergebnis:

Abbildung 3
Abbildung 3 Ausgabe des Quellcodes nach dem Speichern des Haupttemplates

Pragmatisch, praktisch, gut … ;-)

Die Klasse ParamTextTempalte befindet sich in der Include-Datei TemplateFileManager.CS.ttinclude. Der Inhalt steht in der Code-Gallery des Tangible T4-Editors unter der Kategorie .ttinclude zur Verfügung.

Abbildung 4
Abbildung 4 Inhalt der Include-Datei TemplateFileManager.CS.ttinclude verfügbar in der Code Gallery des Tangible T4 Editors
  •  
  • 0 Kommentar(e)
  •  

Mein Kommentar

Über jeden weiteren Kommentar in diesem Post benachrichtigen.

Zurück

Translate this page

Kategorien

  • [-].NET Development (215)
  • [-]Datenbank (26)
  • HTML (1)
  • Konfiguration (12)
  • Mind Map (10)
  • Off-topic (9)
  • Open Source (3)
  • Qualität (7)
  • Sharepoint (6)
  • Sicherheit (2)

Archiv

Social Bookmarking

Bookmark bei: Mr. Wong Bookmark bei: Webnews Bookmark bei: Icio Bookmark bei: Oneview Bookmark bei: Linkarena Bookmark bei: Favoriten Bookmark bei: Seekxl Bookmark bei: Favit Bookmark bei: Social Bookmarking Tool Bookmark bei: Power Oldie Bookmark bei: Bookmarks.cc Bookmark bei: Newskick Bookmark bei: Newsider Bookmark bei: Linksilo Bookmark bei: Readster Bookmark bei: Folkd Bookmark bei: Yigg Bookmark bei: Digg Bookmark bei: Del.icio.us Bookmark bei: Reddit Bookmark bei: Simpy Bookmark bei: StumbleUpon Bookmark bei: Slashdot Bookmark bei: Netscape Bookmark bei: Furl Bookmark bei: Yahoo Bookmark bei: Spurl Bookmark bei: Google Bookmark bei: Blinklist Bookmark bei: Blogmarks Bookmark bei: Diigo Bookmark bei: Technorati Bookmark bei: Newsvine Bookmark bei: Blinkbits Bookmark bei: Ma.Gnolia Bookmark bei: Smarking Bookmark bei: Netvouz Information