Skip to content

Commit e030384

Browse files
Merge pull request #86 from Yazwh0/PreProcessorDirective
Custom Template Namespace
2 parents 0436540 + 915fb81 commit e030384

File tree

6 files changed

+90
-21
lines changed

6 files changed

+90
-21
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
6+
namespace RazorEngineCore.Tests
7+
{
8+
[TestClass]
9+
public class TestTemplateFilename
10+
{
11+
[TestMethod]
12+
public void TestSettingTemplateFilename()
13+
{
14+
RazorEngine razorEngine = new RazorEngine();
15+
var errorThrown = false;
16+
try
17+
{
18+
IRazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("@{ this is a syntaxerror }",
19+
builder => { builder.Options.TemplateFilename = "templatefilenameset.txt"; });
20+
}
21+
catch (Exception e)
22+
{
23+
Assert.IsTrue(e.Message.Contains("templatefilenameset.txt"));
24+
errorThrown = true;
25+
}
26+
27+
Assert.IsTrue(errorThrown);
28+
}
29+
}
30+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
using RazorEngineCore.Tests.Models;
6+
7+
namespace RazorEngineCore.Tests
8+
{
9+
[TestClass]
10+
public class TestTemplateNamespace
11+
{
12+
[TestMethod]
13+
public void TestSettingTemplateNamespace()
14+
{
15+
RazorEngine razorEngine = new RazorEngine();
16+
17+
IRazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("@{ var message = \"OK\"; }@message",
18+
builder => { builder.Options.TemplateNamespace = "Test.Namespace"; });
19+
20+
var result = initialTemplate.Run();
21+
22+
Assert.AreEqual("OK", result);
23+
}
24+
25+
[TestMethod]
26+
public void TestSettingTemplateNamespaceT()
27+
{
28+
RazorEngine razorEngine = new RazorEngine();
29+
30+
var initialTemplate = razorEngine.Compile<TestTemplate2>("@{ var message = \"OK\"; }@message",
31+
builder => { builder.Options.TemplateNamespace = "Test.Namespace"; });
32+
33+
var result = initialTemplate.Run(a => { });
34+
35+
Assert.AreEqual("OK", result);
36+
}
37+
}
38+
}

RazorEngineCore/RazorEngine.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public IRazorEngineCompiledTemplate<T> Compile<T>(string content, Action<IRazorE
2525

2626
MemoryStream memoryStream = this.CreateAndCompileToStream(content, compilationOptionsBuilder.Options);
2727

28-
return new RazorEngineCompiledTemplate<T>(memoryStream);
28+
return new RazorEngineCompiledTemplate<T>(memoryStream, compilationOptionsBuilder.Options.TemplateNamespace);
2929
}
3030

3131
public Task<IRazorEngineCompiledTemplate<T>> CompileAsync<T>(string content, Action<IRazorEngineCompilationOptionsBuilder> builderAction = null) where T : IRazorEngineTemplate
@@ -42,7 +42,7 @@ public IRazorEngineCompiledTemplate Compile(string content, Action<IRazorEngineC
4242

4343
MemoryStream memoryStream = this.CreateAndCompileToStream(content, compilationOptionsBuilder.Options);
4444

45-
return new RazorEngineCompiledTemplate(memoryStream);
45+
return new RazorEngineCompiledTemplate(memoryStream, compilationOptionsBuilder.Options.TemplateNamespace);
4646
}
4747

4848
public Task<IRazorEngineCompiledTemplate> CompileAsync(string content, Action<IRazorEngineCompilationOptionsBuilder> builderAction = null)
@@ -62,7 +62,7 @@ protected virtual MemoryStream CreateAndCompileToStream(string templateSource, R
6262
builder.SetNamespace(options.TemplateNamespace);
6363
});
6464

65-
string fileName = Path.GetRandomFileName();
65+
string fileName = string.IsNullOrWhiteSpace(options.TemplateFilename) ? Path.GetRandomFileName() : options.TemplateFilename;
6666

6767
RazorSourceDocument document = RazorSourceDocument.Create(templateSource, fileName);
6868

@@ -85,7 +85,7 @@ protected virtual MemoryStream CreateAndCompileToStream(string templateSource, R
8585
options.ReferencedAssemblies
8686
.Select(ass =>
8787
{
88-
#if NETSTANDARD2_0
88+
#if NETSTANDARD2_0_OR_GREATER || NET5_0_OR_GREATER
8989
return MetadataReference.CreateFromFile(ass.Location);
9090
#else
9191
unsafe

RazorEngineCore/RazorEngineCompilationOptions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class RazorEngineCompilationOptions
1212

1313
public HashSet<MetadataReference> MetadataReferences { get; set; } = new HashSet<MetadataReference>();
1414
public string TemplateNamespace { get; set; } = "TemplateNamespace";
15+
public string TemplateFilename { get; set; } = "";
1516
public string Inherits { get; set; } = "RazorEngineCore.RazorEngineTemplateBase";
1617

1718
public HashSet<string> DefaultUsings { get; set; } = new HashSet<string>()

RazorEngineCore/RazorEngineCompiledTemplate.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,24 @@
66
namespace RazorEngineCore
77
{
88
public class RazorEngineCompiledTemplate : IRazorEngineCompiledTemplate
9-
{
9+
{
1010
private readonly MemoryStream assemblyByteCode;
1111
private readonly Type templateType;
1212

13-
internal RazorEngineCompiledTemplate(MemoryStream assemblyByteCode)
13+
internal RazorEngineCompiledTemplate(MemoryStream assemblyByteCode, string templateNamespace)
1414
{
1515
this.assemblyByteCode = assemblyByteCode;
1616

1717
Assembly assembly = Assembly.Load(assemblyByteCode.ToArray());
18-
this.templateType = assembly.GetType("TemplateNamespace.Template");
18+
this.templateType = assembly.GetType($"{templateNamespace}.Template");
1919
}
2020

21-
public static IRazorEngineCompiledTemplate LoadFromFile(string fileName)
21+
public static IRazorEngineCompiledTemplate LoadFromFile(string fileName, string templateNamespace = "TemplateNamespace")
2222
{
23-
return LoadFromFileAsync(fileName: fileName).GetAwaiter().GetResult();
23+
return LoadFromFileAsync(fileName: fileName, templateNamespace: templateNamespace).GetAwaiter().GetResult();
2424
}
2525

26-
public static async Task<IRazorEngineCompiledTemplate> LoadFromFileAsync(string fileName)
26+
public static async Task<IRazorEngineCompiledTemplate> LoadFromFileAsync(string fileName, string templateNamespace = "TemplateNamespace")
2727
{
2828
MemoryStream memoryStream = new MemoryStream();
2929

@@ -38,21 +38,21 @@ public static async Task<IRazorEngineCompiledTemplate> LoadFromFileAsync(string
3838
await fileStream.CopyToAsync(memoryStream);
3939
}
4040

41-
return new RazorEngineCompiledTemplate(memoryStream);
41+
return new RazorEngineCompiledTemplate(memoryStream, templateNamespace);
4242
}
4343

4444
public static IRazorEngineCompiledTemplate LoadFromStream(Stream stream)
4545
{
4646
return LoadFromStreamAsync(stream).GetAwaiter().GetResult();
4747
}
4848

49-
public static async Task<IRazorEngineCompiledTemplate> LoadFromStreamAsync(Stream stream)
49+
public static async Task<IRazorEngineCompiledTemplate> LoadFromStreamAsync(Stream stream, string templateNamespace = "TemplateNamespace")
5050
{
5151
MemoryStream memoryStream = new MemoryStream();
5252
await stream.CopyToAsync(memoryStream);
5353
memoryStream.Position = 0;
5454

55-
return new RazorEngineCompiledTemplate(memoryStream);
55+
return new RazorEngineCompiledTemplate(memoryStream, templateNamespace);
5656
}
5757

5858
public void SaveToStream(Stream stream)

RazorEngineCore/RazorEngineCompiledTemplateT.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ public class RazorEngineCompiledTemplate<T> : IRazorEngineCompiledTemplate<T> wh
1010
private readonly MemoryStream assemblyByteCode;
1111
private readonly Type templateType;
1212

13-
internal RazorEngineCompiledTemplate(MemoryStream assemblyByteCode)
13+
internal RazorEngineCompiledTemplate(MemoryStream assemblyByteCode, string templateNamespace)
1414
{
1515
this.assemblyByteCode = assemblyByteCode;
1616

1717
Assembly assembly = Assembly.Load(assemblyByteCode.ToArray());
18-
this.templateType = assembly.GetType("TemplateNamespace.Template");
18+
this.templateType = assembly.GetType($"{templateNamespace}.Template");
1919
}
2020

21-
public static IRazorEngineCompiledTemplate<T> LoadFromFile(string fileName)
21+
public static IRazorEngineCompiledTemplate<T> LoadFromFile(string fileName, string templateNamespace = "TemplateNamespace")
2222
{
23-
return LoadFromFileAsync(fileName: fileName).GetAwaiter().GetResult();
23+
return LoadFromFileAsync(fileName: fileName, templateNamespace: templateNamespace).GetAwaiter().GetResult();
2424
}
2525

26-
public static async Task<IRazorEngineCompiledTemplate<T>> LoadFromFileAsync(string fileName)
26+
public static async Task<IRazorEngineCompiledTemplate<T>> LoadFromFileAsync(string fileName, string templateNamespace = "TemplateNamespace")
2727
{
2828
MemoryStream memoryStream = new MemoryStream();
2929

@@ -38,21 +38,21 @@ public static async Task<IRazorEngineCompiledTemplate<T>> LoadFromFileAsync(stri
3838
await fileStream.CopyToAsync(memoryStream);
3939
}
4040

41-
return new RazorEngineCompiledTemplate<T>(memoryStream);
41+
return new RazorEngineCompiledTemplate<T>(memoryStream, templateNamespace);
4242
}
4343

4444
public static IRazorEngineCompiledTemplate<T> LoadFromStream(Stream stream)
4545
{
4646
return LoadFromStreamAsync(stream).GetAwaiter().GetResult();
4747
}
4848

49-
public static async Task<IRazorEngineCompiledTemplate<T>> LoadFromStreamAsync(Stream stream)
49+
public static async Task<IRazorEngineCompiledTemplate<T>> LoadFromStreamAsync(Stream stream, string templateNamespace = "TemplateNamespace")
5050
{
5151
MemoryStream memoryStream = new MemoryStream();
5252
await stream.CopyToAsync(memoryStream);
5353
memoryStream.Position = 0;
5454

55-
return new RazorEngineCompiledTemplate<T>(memoryStream);
55+
return new RazorEngineCompiledTemplate<T>(memoryStream, templateNamespace);
5656
}
5757

5858
public void SaveToStream(Stream stream)

0 commit comments

Comments
 (0)