Getting Started

Requirements

HatTrick.Configuration targets .NET 9 or later and has no external runtime dependencies.

Installation

dotnet add package HatTrick.Configuration

Namespace: HatTrick.Configuration

JSON configuration

JsonConfigManager reads and writes plain C# types backed by JSON files in a single directory. Register a type against an existing file, then build the instance:

using HatTrick.Configuration;

public class AppSettings
{
    public string ApiBaseUrl { get; set; }
    public int TimeoutSeconds { get; set; }
}
// ./config/app-settings.json
{
  "ApiBaseUrl": "https://api.example.com",
  "TimeoutSeconds": 30
}
var configMgr = JsonConfigManager.BuildInstance("default")
    .Register<AppSettings>("app-settings.json")
    .Build();

AppSettings settings = configMgr.Get<AppSettings>();
Console.WriteLine(settings.ApiBaseUrl);

Register<T> requires the target file to already exist at Build() time. See JSON Configuration for registration, reading, writing, and directory-scoping rules.

Environment variables

EnvVarConfigManager reads named environment variables, resolved once when the instance is built:

var envMgr = EnvVarConfigManager.BuildInstance("default")
    .Register("API_KEY")
    .Build();

string apiKey = envMgr.Get("API_KEY");

Build() throws if a registered variable is not set in the process environment. See Core Concepts for how instance names are scoped per manager, and Environment Variables for the full read-once model.

Next steps

  • Core Concepts: configuration managers, grouping via named instances, the builder pattern, and validation, encryption, and concurrency
  • JSON Configuration: registration rules, reading, writing, and optimistic concurrency
  • Environment Variables: registration and read-once semantics
  • Encryption: AES-GCM encryption for files and variable values
  • Validation: per-type and per-variable validators