É possível usar o motor de vista de barbear fora do ASP.NET
-
26-09-2019 - |
Pergunta
Se eu olhar para o motor View Razor, vejo uma sintaxe muito agradável e concisa que não está particularmente ligada a gerar HTML. Então, eu me pergunto, como seria fácil usar o motor fora do ASP.NET em um ambiente "Normal" .NET, por exemplo, para gerar texto, código, ...
Qualquer ponteiro, exemplo, comentário ou explicação é bem -vindo.
Solução
Há duas questões aqui:
- Sim, você pode executar o motor de visualização de barbear fora do contexto de um domínio do aplicativo ASP.NET, conforme explicado no blog de Andrew: http://vibrantcode.com/blog/2010/11/16/hosting-razor-tonside-of-aspnet-revised-for-mvc3-rc.html
- No entanto, Razor ainda está focado principalmente na geração de marcação do tipo XML (por exemplo, HTML) no sentido de que o analisador de barbear usa a presença de
<tags>
Para determinar a transição entre código e marcação. Você provavelmente pode usá -lo para gerar qualquer texto, mas pode ter problemas quando sua saída não corresponde às suposições da Razor sobre quais são suas intenções.
Por exemplo, enquanto este é um código de barbear válido (devido ao <div>
marcação):
@if(printHello) {
<div>Hello!</div>
}
O snippet a seguir é inválido (porque o Hello! Ainda está sendo tratado como código):
@if(printHello) {
Hello!
}
No entanto, há um especial <text>
tag que pode ser usada para forçar uma transição para blocos de várias linhas (o <text>
tag não será renderizado):
@if(printHello) {
<text>Hello!
Another line</text>
}
Há também uma sintaxe mais curta para forçar uma única linha para fazer a transição usando @:
:
@if(printHello) {
@:Hello!
}
Outras dicas
Verificar RazorEngine, é uma pequena estrutura construída sobre a navalha que permite que você faça isso.
Dar uma olhada em RazorTemplates biblioteca. É mais leve que a Biblioteca RazorEngine, é segura por threads e tem uma interface mínima muito agradável.
Compilar e tornar um modelo é tão simples quanto duas linhas de código:
var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
Ambos RazorEngine e RazorTemplates já são mencionados aqui, mas confira Razormachina. Você pode simplesmente apontar seu aplicativo não-MVC para uma pasta ~/views de (outro) aplicativo MVC existente, executar com o envio de modelo adequado e receber saída renderizada em 2 linhas de código:
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);
Gere código ou texto: você quer dizer como modelos T4: http://msdn.microsoft.com/en-us/library/bb126445.aspx ou ferramentas de codesmith?