2011-02-08 12 views
7

Prima di investire molto tempo nella ricerca del rasoio e della sua applicabilità, vorrei chiederti dei guru del rasoio se si potesse usare il rasoio per generare codice C#? Qualche problema che puoi pensare subito?Usa il rasoio per generare il codice?

+0

commento su "chiuso troppo ampia ": Questa domanda è davvero ampia? La vera domanda qui è "è possibile utilizzare il rasoio per generare codice e se sì come". C'è un esempio funzionante che mostra come generare codice. – k3b

risposta

4

Certamente potrebbe uso del rasoio per generare codice C#, ma in realtà non è progettata per le lingue non-XML-like. Dovresti avere molti tag > di testo .

+0

Grazie, sono le informazioni che stavo cercando. – epitka

+0

+1 Grazie per le informazioni su "" che hanno aiutato a creare una demo funzionante. (vedi la mia risposta qui sotto) – k3b

+0

Andrew - Razor è 100 volte meglio di qualsiasi altro motore di template che abbia mai visto. Complimenti a te! Certamente lo userò ancora piuttosto su altri generatori di goda, anche con i tag ! –

11

Il mio primo tentativo con razor dll versione 2.1.4039.23635 era molto più facile di quanto mi aspettassi

Ecco una piccola demo di lavoro

Il CodeGenerator

using System.Diagnostics; 
using RazorEngine; 

namespace CodeGen3b 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string template = ... see below; 
      try 
      { 
       string generatedCode = Razor.Parse(template, 
            new { UserNamespace = "MyOwnNamespace" }); 
       Debug.WriteLine(generatedCode); 

      } 
      catch (System.Exception ex) 
      { 
       Debug.WriteLine(ex.Message); 
       Debug.WriteLine(ex.StackTrace); 
      } 
     } 
    } 
} 

Il modello assomiglia a questo

using System; 
namespace @Model.UserNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       @for(int i = 0; i < 3; i++){ 
       <text>Debug.WriteLine("hello @i " + @Model.UserNamespace); 
</text>} 
     } 
    } 
} 

Nota l'elemento che impedisce <text> rasoio di interpretare l'uscita Debug.WriteLine

Il è

using System; 
namespace MyOwnNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       Debug.WriteLine("hello 0 " + MyOwnNamespace); 
       Debug.WriteLine("hello 1 " + MyOwnNamespace); 
       Debug.WriteLine("hello 2 " + MyOwnNamespace); 
     } 
    } 
} 

Sarebbe bello se rasoio attuerebbe @"..."@ o @'...'@ come alias per <text>...</text>. Ho aggiunto questo razorengine.codeplex-Issue come una richiesta per migliorare. Se si prevede di utilizzare il rasoio come CodeGenerator si prega di upvote è a razorengine.codeplex-Issue

Edit: come suggerito @Epitka, possiamo usare @: al posto di un singolo tag di testo linea:

using System; 
namespace @Model.UserNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       @for(int i = 0; i < 3; i++){ 
       @:Debug.WriteLine("hello @i " + @Model.UserNamespace); 
       } 
     } 
    } 
} 
+2

non è già presente? @: – epitka

+0

epitka è corretto: http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax.aspx –

+0

@ k3b Grazie! ti piacerebbe creare un piccolo progetto del tuo esempio e condividerlo per il download? – Shahin

Problemi correlati