diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cdc05fb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,33 @@
+.bobbit/state
+
+# Build results
+[Dd]ebug/
+[Rr]elease/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# NuGet
+*.nupkg
+*.snupkg
+.nuget/
+**/packages/
+
+# Visual Studio
+.vs/
+*.user
+*.suo
+*.userosscache
+*.sln.docstates
+
+# Rider
+.idea/
+
+# OS files
+Thumbs.db
+ehthumbs.db
+Desktop.ini
+.DS_Store
diff --git a/.travis.yml b/.travis.yml
index 7431032..1e5e6d6 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,12 +1,10 @@
language: csharp
-dotnet: 2.0.0
+mono: none
+dotnet: 10.0
install:
- dotnet restore
- # workaround for missing .net 4.5 targing pack
- - export FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/
-
script:
- - dotnet build
- - dotnet test Paramulate.Test/Paramulate.Test.csproj
+ - dotnet build --configuration Release
+ - dotnet test Paramulate.Test/Paramulate.Test.csproj --configuration Release
diff --git a/Paramulate.Test/Paramulate.Test.csproj b/Paramulate.Test/Paramulate.Test.csproj
index 7e0a1f9..29395b8 100644
--- a/Paramulate.Test/Paramulate.Test.csproj
+++ b/Paramulate.Test/Paramulate.Test.csproj
@@ -1,13 +1,19 @@
-
+
- netcoreapp2.0
+ net10.0
+ latest
+ false
-
-
-
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
-
\ No newline at end of file
+
diff --git a/Paramulate.Test/TestPrinting.cs b/Paramulate.Test/TestPrinting.cs
index 28b4acd..92d26e0 100644
--- a/Paramulate.Test/TestPrinting.cs
+++ b/Paramulate.Test/TestPrinting.cs
@@ -1,6 +1,6 @@
using System;
+using System.IO;
using NUnit.Framework;
-using NUnit.Framework.Internal;
using Paramulate.Attributes;
namespace Paramulate.Test
@@ -55,7 +55,7 @@ public void TestPrintingObject()
{
var builder = ParamsBuilder.New("PrintParent");
var testObject = builder.Build();
- var testStream = new TextMessageWriter();
+ var testStream = new StringWriter();
builder.WriteParams(testObject, testStream);
Console.WriteLine(testStream.ToString());
diff --git a/Paramulate/Paramulate.csproj b/Paramulate/Paramulate.csproj
index 07dc001..3574139 100644
--- a/Paramulate/Paramulate.csproj
+++ b/Paramulate/Paramulate.csproj
@@ -1,6 +1,8 @@
-
+
- netstandard2.0;net461
+ netstandard2.0;net10.0
+ latest
+ disable
1.0.0-beta3
SuuBro
@@ -12,7 +14,7 @@
true
-
-
+
+
-
\ No newline at end of file
+
diff --git a/README.md b/README.md
index f391fd2..2551da6 100644
--- a/README.md
+++ b/README.md
@@ -99,4 +99,13 @@ App:
```
## Features
-TODO
+- __Strongly-typed parameters:__ define your parameter tree as plain C# interfaces and let Paramulate generate the implementation for you
+- __Sensible defaults:__ specify defaults inline with `[Default("...")]` so your component is usable out-of-the-box
+- __Command line support out of the box:__ the built-in `CommandLineValueProvider` maps fully-qualified paths (e.g. `--App.UserDb.ConnectionString`) to your tree, with short (`-o`) and long (`--output-language`) aliases via `[Alias]`
+- __Pluggable value providers:__ implement `IValueProvider` to pull values from config files, environment variables, databases, secret stores or anything else, and chain providers together in priority order
+- __Nested parameter trees:__ compose reusable parameter interfaces and tweak nested values per-use with `[Override("PropertyName", "value")]`
+- __Source tracking:__ every value remembers where it came from (`Default`, `Override`, `Command Line`, custom provider, ...) so you can pinpoint exactly where a setting was set
+- __Self-documenting output:__ `WriteParams` pretty-prints the resolved parameter tree (values + sources) to any `TextWriter` -- ideal for startup logs
+- __Built-in help:__ `-h` / `--help` is wired up automatically and prints the aliases and help text declared on your interfaces
+- __Unrecognised argument detection:__ unknown command-line keys are surfaced as an `UnrecognisedParameterException` rather than silently ignored
+- __Rich type support:__ primitives, `string`, `enum` (by name or numeric value), `DateTime`, `TimeSpan`, `Nullable` and any JSON-deserialisable type are supported out of the box