Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
        // 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());
        }
Пример #7
0
        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);
        }
Пример #8
0
 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());
 }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
        }
Пример #16
0
        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);
        }
Пример #17
0
        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);
        }
Пример #18
0
        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);
        }
Пример #19
0
        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);
        }
Пример #20
0
        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);
            }
        }
Пример #21
0
        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);
        }
Пример #22
0
        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);
        }
Пример #23
0
        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");
            }
        }
Пример #24
0
 private void compile()
 {
     if (compiledRazorTemplate == null)
     {
         try
         {
             compiledRazorTemplate = new RazorEngine().Compile(sourceRazorTemplate);
         }
         catch (Exception ex)
         {
             errors = ex.Message;
         }
     }
 }
Пример #25
0
        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);
        }
Пример #26
0
        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);
        }
Пример #27
0
        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);
        }
Пример #28
0
        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);
        }
Пример #29
0
        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);
        }
Пример #30
0
        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();
        }