Skip to content

Commit d799548

Browse files
committed
issue 113 proper namespace handling for nested types and types without
namespace
1 parent ad7f971 commit d799548

File tree

8 files changed

+113
-10
lines changed

8 files changed

+113
-10
lines changed

ExampleAppCore/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class TestModel : RazorEngineTemplateBase
1414
class Program
1515
{
1616
static string Content = @"
17-
Hello @Model.Name
17+
@(""Hello"" + Model.Name)111
1818
1919
@foreach(var item in @Model.Items)
2020
{

Pack.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
dotnet build -c Release
22
dotnet test
33
dotnet pack -c Release -o artifacts RazorEngineCore\RazorEngineCore.csproj -p:symbolPackageFormat=snupkg --include-symbols
4-
dotnet nuget push artifacts\RazorEngineCore.2022.1.2.nupkg --source https://www.nuget.org/api/v2/package -k KEY
4+
dotnet nuget push artifacts\RazorEngineCore.2022.8.1.nupkg --source https://www.nuget.org/api/v2/package -k KEY
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace RazorEngineCore.Tests.Models
8+
{
9+
public class NestedTestModel
10+
{
11+
public string Name { get; set; }
12+
public int[] Items { get; set; }
13+
14+
public class TestModelInnerClass1
15+
{
16+
public string Name { get; set; }
17+
public int[] Items { get; set; }
18+
19+
public class TestModelInnerClass2
20+
{
21+
public string Name { get; set; }
22+
public int[] Items { get; set; }
23+
}
24+
}
25+
}
26+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
public class TestModelWithoutNamespace
2+
{
3+
public string Name { get; set; }
4+
public int[] Items { get; set; }
5+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using RazorEngineCore.Tests.Models;
3+
4+
namespace RazorEngineCore.Tests
5+
{
6+
[TestClass]
7+
public class TestTemplateModelNamespace
8+
{
9+
[TestMethod]
10+
public void TestModelNestedTypes()
11+
{
12+
IRazorEngine razorEngine = new RazorEngine();
13+
string content = "Hello @Model.Name";
14+
15+
IRazorEngineCompiledTemplate<RazorEngineTemplateBase<NestedTestModel.TestModelInnerClass1.TestModelInnerClass2>> template2 = razorEngine.Compile<RazorEngineTemplateBase<NestedTestModel.TestModelInnerClass1.TestModelInnerClass2>>(content);
16+
17+
string result = template2.Run(instance =>
18+
{
19+
instance.Model = new NestedTestModel.TestModelInnerClass1.TestModelInnerClass2()
20+
{
21+
Name = "Hello",
22+
};
23+
});
24+
25+
Assert.AreEqual("Hello Hello", result);
26+
}
27+
28+
[TestMethod]
29+
public void TestModelNoNamespace()
30+
{
31+
IRazorEngine razorEngine = new RazorEngine();
32+
string content = "Hello @Model.Name";
33+
34+
IRazorEngineCompiledTemplate<RazorEngineTemplateBase<TestModelWithoutNamespace>> template2 = razorEngine.Compile<RazorEngineTemplateBase<TestModelWithoutNamespace>>(content);
35+
36+
string result = template2.Run(instance =>
37+
{
38+
instance.Model = new TestModelWithoutNamespace()
39+
{
40+
Name = "Hello",
41+
};
42+
});
43+
44+
Assert.AreEqual("Hello Hello", result);
45+
}
46+
}
47+
}

RazorEngineCore.sln

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.29728.190
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.3.32721.290
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorEngineCore", "RazorEngineCore\RazorEngineCore.csproj", "{1E21186E-49A5-433A-ABAD-18CED1AA2494}"
77
EndProject
@@ -14,9 +14,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
1414
EndProject
1515
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExampleAppCore", "ExampleAppCore\ExampleAppCore.csproj", "{38338B92-1D09-41FB-AE11-3783DA7AFE0B}"
1616
EndProject
17-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExampleAppNET472", "ExampleAppNet472\ExampleAppNET472.csproj", "{D27C1578-BFF9-4469-9099-DAF64450BBBE}"
17+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExampleAppNET472", "ExampleAppNet472\ExampleAppNET472.csproj", "{D27C1578-BFF9-4469-9099-DAF64450BBBE}"
1818
EndProject
19-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExampleAppNET5", "ExampleAppNET5\ExampleAppNET5.csproj", "{B19C090A-4EC1-441D-B702-ADD2ECA79198}"
19+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExampleAppNET5", "ExampleAppNET5\ExampleAppNET5.csproj", "{B19C090A-4EC1-441D-B702-ADD2ECA79198}"
2020
EndProject
2121
Global
2222
GlobalSection(SolutionConfigurationPlatforms) = preSolution

RazorEngineCore/RazorEngineCompilationOptionsBuilder.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using System.Reflection;
45
using Microsoft.CodeAnalysis;
@@ -53,7 +54,14 @@ public void Inherits(Type type)
5354

5455
private string RenderTypeName(Type type)
5556
{
56-
string result = type.Namespace + "." + type.Name;
57+
IList<string> elements = new List<string>()
58+
{
59+
type.Namespace,
60+
RenderDeclaringType(type.DeclaringType),
61+
type.Name
62+
};
63+
64+
string result = string.Join(".", elements.Where(e => !string.IsNullOrWhiteSpace(e)));
5765

5866
if (result.Contains('`'))
5967
{
@@ -67,5 +75,22 @@ private string RenderTypeName(Type type)
6775

6876
return result + "<" + string.Join(",", type.GenericTypeArguments.Select(this.RenderTypeName)) + ">";
6977
}
78+
79+
private string RenderDeclaringType(Type type)
80+
{
81+
if (type == null)
82+
{
83+
return null;
84+
}
85+
86+
string parent = RenderDeclaringType(type.DeclaringType);
87+
88+
if (string.IsNullOrWhiteSpace(parent))
89+
{
90+
return type.Name;
91+
}
92+
93+
return parent + "." + type.Name;
94+
}
7095
}
7196
}

RazorEngineCore/RazorEngineCore.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
<PropertyGroup>
33
<TargetFrameworks>net6.0;net5.0;netstandard2.0</TargetFrameworks>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
5-
<Version>2022.1.2</Version>
5+
<Version>2022.8.1</Version>
66
<Authors>Alexander Selishchev, Simon Mourier, William David Cossey, Benjamin Smith, Dag H. Baardsen, krmr, jddj007-hydra</Authors>
77
<PackageProjectUrl>https://github.com/adoconnection/RazorEngineCore</PackageProjectUrl>
88
<Description>NET6 Razor Template Engine</Description>
9-
<AssemblyVersion>2022.1.2</AssemblyVersion>
10-
<FileVersion>2022.1.2</FileVersion>
9+
<AssemblyVersion>2022.8.1</AssemblyVersion>
10+
<FileVersion>2022.8.1</FileVersion>
1111
<PackageReleaseNotes></PackageReleaseNotes>
1212
<Company>Alexander Selishchev, Simon Mourier, William David Cossey, Benjamin Smith, Dag H. Baardsen, krmr, jddj007-hydra</Company>
1313
<SignAssembly>true</SignAssembly>

0 commit comments

Comments
 (0)