diff --git a/.github/workflows/_build.yml b/.github/workflows/_build.yml
index 087b222..754f544 100644
--- a/.github/workflows/_build.yml
+++ b/.github/workflows/_build.yml
@@ -19,7 +19,10 @@ jobs:
- name: Install .NET SDK
uses: actions/setup-dotnet@v4
with:
- dotnet-version: 6.0.x
+ dotnet-version: |
+ 8.0.x
+ 9.0.x
+ 10.0.x
global-json-file: "./global.json"
- name: Restore dependencies
diff --git a/MiniValidation.sln b/MiniValidation.sln
deleted file mode 100644
index 577eec1..0000000
--- a/MiniValidation.sln
+++ /dev/null
@@ -1,75 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.31613.370
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{751FE268-A797-46FE-AEE0-BD35D91BE850}"
- ProjectSection(SolutionItems) = preProject
- src\Directory.Build.props = src\Directory.Build.props
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniValidation", "src\MiniValidation\MiniValidation.csproj", "{60C03B53-10AC-4D37-BA95-7EEFE2FC61FC}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{BF473532-A97B-4CEE-9673-9D4B57D8C1C4}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.Console", "samples\Samples.Console\Samples.Console.csproj", "{75062336-DE25-4EBF-9EC5-0465D37D4623}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.Web", "samples\Samples.Web\Samples.Web.csproj", "{DBDC0E13-44E1-42E8-8751-FF5D3313D538}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{4CF82AD1-D050-422E-99D5-454AE28D6A11}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniValidation.UnitTests", "tests\MiniValidation.UnitTests\MiniValidation.UnitTests.csproj", "{4D247E44-6CF5-4A15-A2D3-09E40753874B}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CDE0DB87-BF92-4F36-B305-B73CE116DD45}"
- ProjectSection(SolutionItems) = preProject
- Directory.Build.props = Directory.Build.props
- Directory.Packages.props = Directory.Packages.props
- global.json = global.json
- LICENSE = LICENSE
- README.md = README.md
- ThirdPartyNotices.txt = ThirdPartyNotices.txt
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniValidation.Benchmarks", "tests\MiniValidation.Benchmarks\MiniValidation.Benchmarks.csproj", "{AFA1AA61-E230-48C8-B12B-6561E2124210}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {60C03B53-10AC-4D37-BA95-7EEFE2FC61FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {60C03B53-10AC-4D37-BA95-7EEFE2FC61FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {60C03B53-10AC-4D37-BA95-7EEFE2FC61FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {60C03B53-10AC-4D37-BA95-7EEFE2FC61FC}.Release|Any CPU.Build.0 = Release|Any CPU
- {75062336-DE25-4EBF-9EC5-0465D37D4623}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {75062336-DE25-4EBF-9EC5-0465D37D4623}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {75062336-DE25-4EBF-9EC5-0465D37D4623}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {75062336-DE25-4EBF-9EC5-0465D37D4623}.Release|Any CPU.Build.0 = Release|Any CPU
- {DBDC0E13-44E1-42E8-8751-FF5D3313D538}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DBDC0E13-44E1-42E8-8751-FF5D3313D538}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DBDC0E13-44E1-42E8-8751-FF5D3313D538}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DBDC0E13-44E1-42E8-8751-FF5D3313D538}.Release|Any CPU.Build.0 = Release|Any CPU
- {4D247E44-6CF5-4A15-A2D3-09E40753874B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4D247E44-6CF5-4A15-A2D3-09E40753874B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4D247E44-6CF5-4A15-A2D3-09E40753874B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4D247E44-6CF5-4A15-A2D3-09E40753874B}.Release|Any CPU.Build.0 = Release|Any CPU
- {AFA1AA61-E230-48C8-B12B-6561E2124210}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AFA1AA61-E230-48C8-B12B-6561E2124210}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AFA1AA61-E230-48C8-B12B-6561E2124210}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AFA1AA61-E230-48C8-B12B-6561E2124210}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {60C03B53-10AC-4D37-BA95-7EEFE2FC61FC} = {751FE268-A797-46FE-AEE0-BD35D91BE850}
- {75062336-DE25-4EBF-9EC5-0465D37D4623} = {BF473532-A97B-4CEE-9673-9D4B57D8C1C4}
- {DBDC0E13-44E1-42E8-8751-FF5D3313D538} = {BF473532-A97B-4CEE-9673-9D4B57D8C1C4}
- {4D247E44-6CF5-4A15-A2D3-09E40753874B} = {4CF82AD1-D050-422E-99D5-454AE28D6A11}
- {AFA1AA61-E230-48C8-B12B-6561E2124210} = {4CF82AD1-D050-422E-99D5-454AE28D6A11}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {23EC839A-3D4A-43DC-A6B4-A641D51BF0A6}
- EndGlobalSection
-EndGlobal
diff --git a/MiniValidation.slnx b/MiniValidation.slnx
new file mode 100644
index 0000000..ac3b69a
--- /dev/null
+++ b/MiniValidation.slnx
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/global.json b/global.json
index 501e79a..512142d 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "8.0.100",
+ "version": "10.0.100",
"rollForward": "latestFeature"
}
-}
\ No newline at end of file
+}
diff --git a/samples/Samples.Console/Samples.Console.csproj b/samples/Samples.Console/Samples.Console.csproj
index 92b9057..7bfb498 100644
--- a/samples/Samples.Console/Samples.Console.csproj
+++ b/samples/Samples.Console/Samples.Console.csproj
@@ -2,7 +2,7 @@
Exe
- net6.0
+ net8.0
enable
diff --git a/samples/Samples.Web/Samples.Web.csproj b/samples/Samples.Web/Samples.Web.csproj
index 7190ba0..f3b5e57 100644
--- a/samples/Samples.Web/Samples.Web.csproj
+++ b/samples/Samples.Web/Samples.Web.csproj
@@ -1,7 +1,7 @@
- net7.0
+ net8.0
enable
enable
diff --git a/src/MiniValidation/MiniValidation.csproj b/src/MiniValidation/MiniValidation.csproj
index 7f2afc4..44f3c99 100644
--- a/src/MiniValidation/MiniValidation.csproj
+++ b/src/MiniValidation/MiniValidation.csproj
@@ -2,7 +2,7 @@
A minimalist validation library built atop the existing validation features in .NET's `System.ComponentModel.DataAnnotations` namespace.
- netstandard2.0;net6.0
+ netstandard2.0;net8.0
ComponentModel DataAnnotations validation
README.md
10.0
diff --git a/src/MiniValidation/TypeDetailsCache.cs b/src/MiniValidation/TypeDetailsCache.cs
index aee8fb2..0d743de 100644
--- a/src/MiniValidation/TypeDetailsCache.cs
+++ b/src/MiniValidation/TypeDetailsCache.cs
@@ -14,6 +14,21 @@ internal class TypeDetailsCache
private static readonly PropertyDetails[] _emptyPropertyDetails = Array.Empty();
private readonly ConcurrentDictionary _cache = new();
+ public TypeDetailsCache()
+ {
+ TypeDescriptor.Refreshed += args =>
+ {
+ if (args.TypeChanged is { } type)
+ {
+ _cache.TryRemove(type, out _);
+ }
+ else
+ {
+ _cache.Clear();
+ }
+ };
+ }
+
public (PropertyDetails[] Properties, bool RequiresAsync) Get(Type? type)
{
if (type is null)
@@ -21,12 +36,13 @@ internal class TypeDetailsCache
return (_emptyPropertyDetails, false);
}
- if (!_cache.ContainsKey(type))
+ (PropertyDetails[] Properties, bool RequiresAsync) details;
+ while (!_cache.TryGetValue(type, out details))
{
Visit(type);
}
- return _cache[type];
+ return details;
}
private void Visit(Type type)
diff --git a/tests/MiniValidation.Benchmarks/MiniValidation.Benchmarks.csproj b/tests/MiniValidation.Benchmarks/MiniValidation.Benchmarks.csproj
index e142f3c..87f0f67 100644
--- a/tests/MiniValidation.Benchmarks/MiniValidation.Benchmarks.csproj
+++ b/tests/MiniValidation.Benchmarks/MiniValidation.Benchmarks.csproj
@@ -2,8 +2,7 @@
Exe
- net6.0;net7.0
- net471;net6.0;net7.0
+ net8.0;net9.0;net10.0
enable
enable
10
diff --git a/tests/MiniValidation.UnitTests/MiniValidation.UnitTests.csproj b/tests/MiniValidation.UnitTests/MiniValidation.UnitTests.csproj
index 0e7f43a..a640ad8 100644
--- a/tests/MiniValidation.UnitTests/MiniValidation.UnitTests.csproj
+++ b/tests/MiniValidation.UnitTests/MiniValidation.UnitTests.csproj
@@ -1,8 +1,7 @@
- net6.0;net7.0;net8.0
- net471;net6.0;net7.0;net8.0
+ net8.0;net9.0;net10.0
10.0
enable
enable