C# T4 code generatie op basis van user input

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01 15:07

6K

is ook zo...

Topicstarter
T4 Code generatie is op zich aardig te begrijpen, maar allemaal vanuit de designer. Het aanmaken van scripts, templates en generatoren is goed te doen.
Wat ik niet begrijp is hoe ik vanuit code parameters door kan geven (run time) aan een script om zo de juiste 'code' te genereren.

Een voorbeeldje:
Een simpel script als:

C#:
1
2
3
4
5
6
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="sql" #>
<#@ include file="T4Toolbox.tt" #>
USE [DATABASENAME]
GO
DROP PROCEDURE [dbo].[COMPANY$SomeProcedure]


Is prima om te zetten naar een template:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<#@ include file="T4Toolbox.tt" #>
<#@ output extension="cs" #>
<#+
public class TemplateTest : Template
{
    public string DatabaseName;
    public string CompanyName;
    
    public override string TransformText()
    {
#>

USE [<#= DatabaseName #>]
GO
DROP PROCEDURE [dbo].[<#= CompanyName #>$SomeProcedure]
<#+ 
 return this.GenerationEnvironment.ToString();
    }
}
 #>


Om tot slot een script gebasseerd op het template te maken:
C#:
1
2
3
4
5
6
7
8
9
10
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="sql" #>
<#@ include file="T4Toolbox.tt" #>
<#@ include file="TemplateTest.tt" #>
<#
    TemplateTest template = new TemplateTest();
    template.CompanyName = "TestCompany";
    template.DatabaseName = "TestDatabase";
    template.Render();
#>


Wat ik niet begrijp is hoe ik userinput kan gebruiken om Database en Company te vullen?
Ik ben aan het stoeien geslagen met Preprocessed templates, maar loop behoorlijk vast, heeft iemand hier ervaring mee om me de goede kant in te sturen?

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Om runtime code te genereren zul je zelf T4 moeten hosten in je applicatie.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01 15:07

6K

is ook zo...

Topicstarter
Daar kwam ik inderdaad ook achter, ik probeer nu een custom host te maken omdat het buiten Visual Studio moet gaan draaien.
Maar als ik standaard MSDN volg werkt het meest rechttoe-rechtaan voorbeeld nog niet eens :/

SessionHost object is niet te casten (veel gevonden probleem) waarbij Serializable als enige optie werd gegeven. Ook het controleren op de aanwezigheid van assemblies faalt zoals in de meeste custom host voorbeelden staat. Vreemd dat het blijkbaar zo moelijk is om code te genereren, ik neig bijna naar niet genereren, maar gewoon uitprogrammeren van het resultaat, dan was ik al klaar geweest.
Maar ja, kan gewoon niet velen dat ik het niet aan de praat krijg.

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Als je gewoon tekst wil genereren (html/mails/sql scripts) dan kun je eens kijken naar Razor. Deze is goed in te zetten hiervoor. Die is wel gebouwd met dit soort dingen in het achterhoofd.

Misschien heb je hier iets aan:
http://www.west-wind.com/...ng-in-NonWeb-Applications

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01 15:07

6K

is ook zo...

Topicstarter
Perfect timing, ik was net aan het googlen naar andere generator mogelijkheden, bedankt, hier ga ik zeker even naar kijken, ben dat T4 wel beu voor nu!

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Hier is nog een betere link btw:

http://weblogs.asp.net/mi...zor-for-t4-templates.aspx

en een goed project:

http://razorengine.codeplex.com/

[ Voor 19% gewijzigd door Grijze Vos op 30-08-2011 14:11 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01 15:07

6K

is ook zo...

Topicstarter
Die eerste link verschaft nog wel het meeste inzicht in het zelf maken van de transform engine. Het codeplex project doet dat voor je ;)

Kortom, met razor is het een fluitje van een cent ten opzichte van T4. T4 templates zijn weliswaar krachtig en bieden een nette oplossing voor complexe generatie processen, maar onder de streep is het werken vanuit code run-time een stuk eenvoudiger met Razor omdat de custom host een stuk eenvoudiger te realiseren is.

Bedankt voor de tip!

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶

Pagina: 1