|
@@ -1,9 +1,9 @@
|
|
-using System;
|
|
|
|
|
|
+using AspNetCoreSsrTemplateEngine.Renders;
|
|
|
|
+using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using System.Text.RegularExpressions;
|
|
-using AspNetCoreSsrTemplateEngine.Renders;
|
|
|
|
|
|
|
|
namespace AspNetCoreSsrTemplateEngine.Template
|
|
namespace AspNetCoreSsrTemplateEngine.Template
|
|
{
|
|
{
|
|
@@ -17,28 +17,49 @@ namespace AspNetCoreSsrTemplateEngine.Template
|
|
{
|
|
{
|
|
if (instance == null) throw new ArgumentNullException(nameof(instance));
|
|
if (instance == null) throw new ArgumentNullException(nameof(instance));
|
|
|
|
|
|
- var template = LoadTemplateResource(instance);
|
|
|
|
|
|
+ var fullTypeName = instance.GetType().FullName;
|
|
|
|
|
|
- return new SimpleTemplate(ParseInternal(template, componentResolver));
|
|
|
|
|
|
+#if !EMBED_HTML
|
|
|
|
+ return new HotLoadTemplate(fullTypeName, componentResolver);
|
|
|
|
+#else
|
|
|
|
+ return new SimpleTemplate(LoadByFullTypeName(fullTypeName, componentResolver));
|
|
|
|
+#endif
|
|
}
|
|
}
|
|
|
|
|
|
- private static string LoadTemplateResource(object instance)
|
|
|
|
|
|
+ internal static IRender[] LoadByFullTypeName(string fullTypeName, IComponentResolver componentResolver)
|
|
{
|
|
{
|
|
- var typeFullName = instance.GetType().FullName ?? throw new InvalidOperationException("Class full name is null?");
|
|
|
|
|
|
+ var template = LoadTemplateResource(fullTypeName);
|
|
|
|
+ var seq = ParseInternal(template, componentResolver);
|
|
|
|
+ return seq;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ private static string LoadTemplateResource(string typeFullName)
|
|
|
|
+ {
|
|
#if EMBED_HTML
|
|
#if EMBED_HTML
|
|
var asm = instance.GetType().Assembly;
|
|
var asm = instance.GetType().Assembly;
|
|
var manifestResourceStream = asm.GetManifestResourceStream(typeFullName);
|
|
var manifestResourceStream = asm.GetManifestResourceStream(typeFullName);
|
|
if (null == manifestResourceStream) throw new System.Resources.MissingManifestResourceException($"resource `{typeFullName}' not found");
|
|
if (null == manifestResourceStream) throw new System.Resources.MissingManifestResourceException($"resource `{typeFullName}' not found");
|
|
var template = Utils.StreamExtensionMethod.ReadUtf8(manifestResourceStream);
|
|
var template = Utils.StreamExtensionMethod.ReadUtf8(manifestResourceStream);
|
|
#else
|
|
#else
|
|
- var projectDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../../"));
|
|
|
|
- var template = File.ReadAllText(Path.Combine(projectDir, typeFullName.Replace(".", "/") + FileExtension));
|
|
|
|
|
|
+ var path = GetTemplateFilePath(typeFullName);
|
|
|
|
+ var template = File.ReadAllText(path);
|
|
#endif
|
|
#endif
|
|
return template;
|
|
return template;
|
|
}
|
|
}
|
|
|
|
|
|
- private static IRender[] ParseInternal(string template, IComponentResolver componentResolver)
|
|
|
|
|
|
+#if !EMBED_HTML
|
|
|
|
+
|
|
|
|
+ internal static string GetTemplateFilePath(string typeFullName)
|
|
|
|
+ {
|
|
|
|
+ var projectDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../../"));
|
|
|
|
+ var path = Path.Combine(projectDir, typeFullName.Replace(".", "/") + FileExtension);
|
|
|
|
+
|
|
|
|
+ return Path.GetFullPath(path);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+ internal static IRender[] ParseInternal(string template, IComponentResolver componentResolver)
|
|
{
|
|
{
|
|
var comments = ParseRegex.Matches(template).OrderBy(p => p.Index);
|
|
var comments = ParseRegex.Matches(template).OrderBy(p => p.Index);
|
|
|
|
|