public async Task TestCompileAndRun_LinqAsync() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate <TestTemplate2> template = await razorEngine.CompileAsync <TestTemplate2>( @" @foreach (var item in Model.Numbers.OrderByDescending(x => x)) { <p>@item</p> } "); string expected = @" <p>3</p> <p>2</p> <p>1</p> "; string actual = await template.RunAsync(instance => { instance.Initialize(new TestModel { Numbers = new[] { 2, 1, 3 } }); }); Assert.AreEqual(expected, actual); }
public string RenderHtmlTemplate <T>(ReportViewModel <T> reportViewModel, string type = "DEFAULT") { string path = null; if (type == "DEFAULT") { path = string.Format("{0}\\templates\\default-report.cshtml", Directory.GetCurrentDirectory()); } else { path = string.Format("{0}\\templates\\single-order-report.cshtml", Directory.GetCurrentDirectory()); } string razorHtml = System.Text.Encoding.UTF8.GetString(File.ReadAllBytes(path)); IRazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = razorEngine.Compile(razorHtml, builder => { builder.AddAssemblyReference(typeof(Utility)); builder.AddAssemblyReference(typeof(Stat)); builder.AddAssemblyReference(typeof(ReportViewModel <T>)); builder.AddAssemblyReference(typeof(System.DateTime)); }); string generatedHtml = template.Run(reportViewModel); return(generatedHtml); }
public void TestCompileAndRun_DynamicModelLinq() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = razorEngine.Compile( @" @foreach (var item in ((IEnumerable<object>)Model.Numbers).OrderByDescending(x => x)) { <p>@item</p> } "); string expected = @" <p>3</p> <p>2</p> <p>1</p> "; string actual = template.Run(new { Numbers = new List <object>() { 2, 1, 3 } }); Assert.AreEqual(expected, actual); }
/// <summary> /// 构建代码信息 /// </summary> /// <param name="assembly"></param> /// <param name="type"></param> /// <returns></returns> async Task <string> BuildInfo(Assembly assembly, Type type) { IRazorEngine razorEngine = new RazorEngine(); string template = GetResourceTemplate("info.cshtml"); IRazorEngineCompiledTemplate <RazorEngineTemplateBase <CodeInfoModel> > compile = await razorEngine.CompileAsync <RazorEngineTemplateBase <CodeInfoModel> >(template); string html = compile.Run(modelBuilder => { CodeInfoModel model = new CodeInfoModel(); PropertyInfo[] properties = type.GetProperties().Where(x => x.CanWrite).ToArray(); // 当前类型公开定义的可写属性数组 model.AssemblyName = assembly.GetName().Name; model.ClassName = type.Name; model.Namespace = type.Namespace; model.PropertyNames = properties.Select(x => x.Name).ToArray(); try { model.Json = JsonSerializer.Serialize(Activator.CreateInstance(type)); } catch { // ignore /*****忽略json序列化失败*****/ } modelBuilder.Model = model; }); return(html); }
private void initDefault() { if (defaultTemplate != null) { return; } lock (this) { if (defaultTemplate == null) { defaultTemplate = new CSharpTemplate(); } else { return; } razorEngine = new RazorEngine(); beanTemplate = GetTemplate <CSharpClass>(javaBeanTemplateRelatePath); daoTemplate = GetTemplate <JavaDaoConfig>(javaDaoTemplateRelatePath); mapperTemplate = GetTemplate <JavaMapperConfig>(javaMapperTemplateRelatePath); codeTemplate = GetTemplate <JavaCodeConfig>(javaCodeTemplateRelatePath); defaultTemplate.beanTemplate = beanTemplate; defaultTemplate.daoTemplate = daoTemplate; defaultTemplate.mapperTemplate = mapperTemplate; defaultTemplate.serviceTemplate = codeTemplate; defaultTemplate.modelTemplate = codeTemplate; defaultTemplate.serviceImplTemplate = codeTemplate; defaultTemplate.controllerTemplate = codeTemplate; } }
// ReSharper disable MemberCanBePrivate.Global public static string Run <TTemplate>( this IRazorEngineCompiledTemplate <TTemplate> compiledTemplate, object model = null) where TTemplate : class, IRazorEngineTemplate { return(compiledTemplate.RunAsync <TTemplate>(model).GetAwaiter().GetResult()); }
public void TestCompileAndRun_AnonymousModelWithArrayOfObjects() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate <TestTemplate2> template = razorEngine.Compile <TestTemplate2>( @" @foreach (var item in Model.Numbers.OrderByDescending(x => x)) { <p>@item</p> } "); string expected = @" <p>3</p> <p>2</p> <p>1</p> "; string actual = template.Run(instance => { instance.Initialize(new TestModel { Numbers = new[] { 2, 1, 3 } }); }); Assert.AreEqual(expected, actual); }
public static string Run <TTemplate, TModel>( this IRazorEngineCompiledTemplate <TTemplate> compiledTemplate, TModel model = default) where TModel : class where TTemplate : class, IRazorEngineTemplate { return(compiledTemplate.RunAsync <TTemplate, TModel>(model).GetAwaiter().GetResult()); }
public async Task TestCompileAndRun_MetadataReference() { string greetingClass = @" namespace TestAssembly { public static class Greeting { public static string GetGreeting(string name) { return ""Hello, "" + name + ""!""; } } } "; // This needs to be done in the builder to have access to all of the assemblies added through // the various AddAssemblyReference options CSharpCompilation compilation = CSharpCompilation.Create( "TestAssembly", new[] { CSharpSyntaxTree.ParseText(greetingClass) }, GetMetadataReferences(), new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary) ); MemoryStream memoryStream = new MemoryStream(); EmitResult emitResult = compilation.Emit(memoryStream); if (!emitResult.Success) { Assert.Fail("Unable to compile test assembly"); } memoryStream.Position = 0; // Add an assembly resolver so the assembly can be found AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) => new AssemblyName(eventArgs.Name ?? string.Empty).Name == "TestAssembly" ? Assembly.Load(memoryStream.ToArray()) : null; RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync(@" @using TestAssembly <p>@Greeting.GetGreeting(""Name"")</p> ", builder => { builder.AddMetadataReference(MetadataReference.CreateFromStream(memoryStream)); }); string expected = @" <p>Hello, Name!</p> "; string actual = await template.RunAsync(); Assert.AreEqual(expected, actual); }
private IRazorEngineCompiledTemplate <RazorEngineTemplateBase <T> > GetTemplate() { if (TemplateProvider.AllowCache) { return(_Template ?? (_Template = LoadTemplate())); } return(LoadTemplate()); }
public void TestSettingTemplateNamespace() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("@{ var message = \"OK\"; }@message", builder => { builder.Options.TemplateNamespace = "Test.Namespace"; }); var result = initialTemplate.Run(); Assert.AreEqual("OK", result); }
public void TestCompileAndRun_InAttributeVariables2() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = razorEngine.Compile("<img src='@(\"test\")'>"); string actual = template.Run(new { Colour = 88 }); Assert.AreEqual("<img src='test'>", actual); }
public void TestCompileAndRun_HtmlLiteral() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = razorEngine.Compile("<h1>Hello @Model.Name</h1>"); string actual = template.Run(new { Name = "Alex" }); Assert.AreEqual("<h1>Hello Alex</h1>", actual); }
public async Task TestCompileAndRun_InAttributeVariablesAsync() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div class=\"circle\" style=\"background-color: hsla(@Model.Colour, 70%, 80%,1);\">"); string actual = await template.RunAsync(new { Colour = 88 }); Assert.AreEqual("<div class=\"circle\" style=\"background-color: hsla(88, 70%, 80%,1);\">", actual); }
public void TestCompileAndRun_HtmlAttribute() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = razorEngine.Compile("<div title=\"@Model.Name\">Hello</div>"); string actual = template.Run(new { Name = "Alex" }); Assert.AreEqual("<div title=\"Alex\">Hello</div>", actual); }
public async Task TestCompileAndRun_DynamicModel_PlainAsync() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync("Hello @Model.Name"); string actual = await template.RunAsync(new { Name = "Alex" }); Assert.AreEqual("Hello Alex", actual); }
public async Task TestCompileAndRun_HtmlLiteralAsync() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<h1>Hello @Model.Name</h1>"); string actual = await template.RunAsync(new { Name = "Alex" }); Assert.AreEqual("<h1>Hello Alex</h1>", actual); }
public void TestCompileAndRun_DynamicModel_Plain() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = razorEngine.Compile("Hello @Model.Name"); string actual = template.Run(new { Name = "Alex" }); Assert.AreEqual("Hello Alex", actual); }
public async Task TestCompileAndRun_HtmlAttributeAsync() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div title=\"@Model.Name\">Hello</div>"); string actual = await template.RunAsync(new { Name = "Alex" }); Assert.AreEqual("<div title=\"Alex\">Hello</div>", actual); }
public static void Init() { var baseDir = AppDomain.CurrentDomain.BaseDirectory; string templateDir = Path.Combine(baseDir, "CodeGenerator/Templates"); var files = Directory.GetFiles(templateDir, "*", SearchOption.AllDirectories); IRazorEngine razorEngine = new RazorEngine(); foreach (var item in files) { IRazorEngineCompiledTemplate template = razorEngine.Compile(File.ReadAllText(item)); TemplateCache.TryAdd(Path.GetFileNameWithoutExtension(item), template); } }
public void TestSaveToFile() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("Hello @Model.Name"); initialTemplate.SaveToFile("testTemplate.dll"); IRazorEngineCompiledTemplate loadedTemplate = RazorEngineCompiledTemplate.LoadFromFile("testTemplate.dll"); string initialTemplateResult = initialTemplate.Run(new { Name = "Alex" }); string loadedTemplateResult = loadedTemplate.Run(new { Name = "Alex" }); Assert.AreEqual(initialTemplateResult, loadedTemplateResult); }
public async Task TestCompileAndRun_TypedModel1Async() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate <TestTemplate1> template = await razorEngine.CompileAsync <TestTemplate1>("Hello @A @B @(A + B) @C @Decorator(\"777\")"); string actual = await template.RunAsync(instance => { instance.A = 1; instance.B = 2; instance.C = "Alex"; }); Assert.AreEqual("Hello 1 2 3 Alex -=777=-", actual); }
void init(DDLConfig.DBType myDBType) { if (razorEngines.ContainsKey(myDBType.ToString())) { return; } lock (this) { if (razorEngines.ContainsKey(myDBType.ToString())) { return; } string templateRelatePath = string.Empty; switch (myDBType) { case DDLConfig.DBType.MySql: templateRelatePath = templateMysqlRelatePath; break; case DDLConfig.DBType.Oracle: templateRelatePath = templateOracleRelatePath; break; default: throw new ArgumentNullException(nameof(myDBType)); } string templatePath = Environment.CurrentDirectory + templateRelatePath; logger.Info(templatePath); string templateContent = File.ReadAllText(templatePath); IRazorEngine razorEngine = new RazorEngine(); razorEngines[myDBType.ToString()] = razorEngine; IRazorEngineCompiledTemplate <RazorEngineTemplateBase <DDLTable> > template = razorEngine.Compile <RazorEngineTemplateBase <DDLTable> >(templateContent, builder => { //builder.AddAssemblyReferenceByName("System.Security"); // by name //builder.AddAssemblyReference(typeof(System.IO.File)); // by type //builder.AddAssemblyReference(Assembly.Load("source")); // by reference builder.AddAssemblyReferenceByName("System.Collections"); }); templates[myDBType.ToString()] = template; //IRazorEngineCompiledTemplate template = razorEngine.Compile(templateContent);// "Hello @Model.Name"); } }
private void compile() { if (compiledRazorTemplate == null) { try { compiledRazorTemplate = new RazorEngine().Compile(sourceRazorTemplate); } catch (Exception ex) { errors = ex.Message; } } }
public async Task TestSaveToFileAsync() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name"); await initialTemplate.SaveToFileAsync("testTemplate.dll"); IRazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromFileAsync("testTemplate.dll"); string initialTemplateResult = await initialTemplate.RunAsync(new { Name = "Alex" }); string loadedTemplateResult = await loadedTemplate.RunAsync(new { Name = "Alex" }); Assert.AreEqual(initialTemplateResult, loadedTemplateResult); }
public void TestCompileAndRun_NullablePropertyWithoutValue() { RazorEngine razorEngine = new RazorEngine(); DateTime?dateTime = null; IRazorEngineCompiledTemplate <TestTemplate2> template = razorEngine.Compile <TestTemplate2>("DateTime: @Model.DateTime"); string actual = template.Run(instance => instance.Model = new TestModel() { DateTime = dateTime }); Assert.AreEqual("DateTime: " + dateTime, actual); }
public async Task TestCompileAndRun_TypedModel2Async() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate <TestTemplate2> template = await razorEngine.CompileAsync <TestTemplate2>("Hello @Model.Decorator(Model.C)"); string actual = await template.RunAsync(instance => { instance.Initialize(new TestModel { C = "Alex" }); }); Assert.AreEqual("Hello -=Alex=-", actual); }
protected override void OnStartup(StartupEventArgs e) { var cul = new CultureInfo("ar-EG"); Thread.CurrentThread.CurrentCulture = cul; Thread.CurrentThread.CurrentUICulture = cul; Data.Core.StartUp_Engine(); if (string.IsNullOrWhiteSpace(Phony.Properties.Settings.Default.PrimaryColor)) { Phony.Properties.Settings.Default.PrimaryColor = "Teal"; Phony.Properties.Settings.Default.Save(); } if (string.IsNullOrWhiteSpace(Phony.Properties.Settings.Default.AccentColor)) { Phony.Properties.Settings.Default.AccentColor = "Yellow"; Phony.Properties.Settings.Default.Save(); } try { Helpers.ThemeHelper.ApplyBase(Phony.Properties.Settings.Default.IsDarkTheme); Helpers.ThemeHelper.ApplyPrimary(Helpers.ThemeHelper.Swatches.First(x => x.Name == Phony.Properties.Settings.Default.PrimaryColor)); Helpers.ThemeHelper.ApplyAccent(Helpers.ThemeHelper.Swatches.First(x => x.Name == Phony.Properties.Settings.Default.AccentColor)); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } // Init Razor Engine to be faster at first load new Thread(new ThreadStart(() => { IRazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = razorEngine.Compile("Hello @Model.Name"); string result = template.Run(new { Name = "RazorEngine" }); System.Diagnostics.Debug.WriteLine(result); })).Start(); base.OnStartup(e); }
public void TestSaveToStream() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("Hello @Model.Name"); MemoryStream memoryStream = new MemoryStream(); initialTemplate.SaveToStream(memoryStream); memoryStream.Position = 0; IRazorEngineCompiledTemplate loadedTemplate = RazorEngineCompiledTemplate.LoadFromStream(memoryStream); string initialTemplateResult = initialTemplate.Run(new { Name = "Alex" }); string loadedTemplateResult = loadedTemplate.Run(new { Name = "Alex" }); Assert.AreEqual(initialTemplateResult, loadedTemplateResult); }
static void Main(string[] args) { IRazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate template = razorEngine.Compile(Content); string result = template.Run(new { Name = "Alexander", Items = new List <string>() { "item 1", "item 2" } }); Console.WriteLine(result); Console.ReadKey(); }