Si je regarde le moteur de visualisation Razor, je vois une syntaxe très agréable et concise qui n'est pas particulièrement liée à la génération de code HTML. Je me demande donc à quel point il serait facile d'utiliser le moteur en dehors d'asp.net dans un environnement .net "normal" par exemple pour générer du texte, du code, ...
Tout pointeur, exemple, commentaire ou explication est le bienvenu.
Il y a deux problèmes ici:
<tags>
pour déterminer la transition entre le code et le balisage. Vous pouvez probablement l'utiliser pour générer n'importe quel texte, mais vous pourriez rencontrer des problèmes lorsque votre sortie ne correspond pas aux hypothèses de Razor sur vos intentions.Ainsi, par exemple, alors qu'il s'agit d'un code Razor valide (en raison du <div>
tag):
@if(printHello) {
<div>Hello!</div>
}
L'extrait de code suivant n'est pas valide (car Hello! Est toujours traité comme du code):
@if(printHello) {
Hello!
}
Cependant, il existe un <text>
tag qui peut être utilisé pour forcer une transition pour les blocs multilignes (le <text>
la balise ne sera pas rendue):
@if(printHello) {
<text>Hello!
Another line</text>
}
Il existe également une syntaxe plus courte pour forcer la transition d'une seule ligne à l'aide de @:
:
@if(printHello) {
@:Hello!
}
Vérifiez RazorEngine , c'est un petit framework construit au-dessus de Razor qui vous permet de le faire.
Jetez un œil à la bibliothèque RazorTemplates . Il est plus léger que la bibliothèque RazorEngine, il est compatible avec les threads et possède une interface minimale très agréable.
La compilation et le rendu d'un modèle sont aussi simples que deux lignes de code:
var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
RazorEngine et RazorTemplates sont déjà mentionnés ici, mais consultez - RazorMachine . Vous pouvez simplement pointer votre application non MVC vers un dossier ~/Views d'une (autre) application MVC existante, exécuter avec l'envoi du modèle approprié et obtenir une sortie rendue sur 2 lignes de code:
var sb = new StringBuilder();
//RazorMachine magic:
//*tweets* is basically List<TwitterPost> - simple collection of custom POCO
//first param for rm.ExecuteUrl points to ~/Views folder, MVC style
var rm = new RazorMachine(htmlEncode: false);
ITemplate template = rm.ExecuteUrl("~/Twitter/twitter", tweets);
//do whatever you want with result
sb.Append(template);
Générez du code ou du texte: vous voulez dire comme les modèles T4: http://msdn.Microsoft.com/en-us/library/bb126445.aspx ou des outils de codemith?