Table of Contents

Quickstart

This guide gets you from zero to working code in under five minutes. You'll install a MADE.NET package, use it to solve a common problem, and see the result.

Prerequisites

  • .NET 8 SDK or later
  • A .NET project (console app, web API, class library - anything works)

Install your first package

For this quickstart, we'll use MADE.Data.Validation to validate user input. Install it via the .NET CLI:

dotnet add package MADE.Data.Validation

Validate a value in three lines

The validation library gives you a collection of ready-made validators that you compose together. Here's a complete example that validates an email address:

using MADE.Data.Validation;
using MADE.Data.Validation.Validators;

var validators = new ValidatorCollection
{
    new RequiredValidator(),
    new EmailValidator(),
};

validators.Validate("user@example.com");
Console.WriteLine(validators.IsInvalid ? "Invalid" : "Valid");
// Output: Valid

validators.Validate("");
Console.WriteLine(validators.IsInvalid ? "Invalid" : "Valid");
// Output: Invalid

The ValidatorCollection runs every validator against the value and aggregates the results. You get a single IsInvalid flag and a FeedbackMessages collection with human-readable error descriptions.

Try another package

Here's a taste of what other packages look like in practice:

Collections - compare and sync collections

dotnet add package MADE.Collections
using MADE.Collections;

var current = new List<string> { "Alice", "Bob", "Charlie" };
var updated = new List<string> { "Alice", "Diana" };

current.MakeEqualTo(updated);
// current is now ["Alice", "Diana"]

Threading - debounce rapid actions

dotnet add package MADE.Threading
using MADE.Threading;

var debouncer = new Debouncer { Delay = TimeSpan.FromMilliseconds(300) };

// Only the last call within 300ms actually executes
debouncer.Debounce(() => Console.WriteLine("Search executed"));

Networking - make typed HTTP requests

dotnet add package MADE.Networking
// In your service registration
services.AddNetworkRequestFactory();

// In your service
public class WeatherService(INetworkRequestFactory requestFactory)
{
    public async Task<WeatherForecast> GetForecastAsync()
    {
        var request = requestFactory.Get("https://api.example.com/weather");
        return await request.ExecuteAsync<WeatherForecast>();
    }
}

What's next

Each package has its own section in the docs with an overview, detailed guides, and best practices:

  • Collections - Extensions for lists, dictionaries, and observables.
  • Data Validation - 30+ built-in validators with async and FluentValidation support.
  • Networking - Typed HTTP requests with retry and DI integration.
  • Threading - Timer, debouncer, throttler, and async patterns.
  • Browse all packages - See the complete package list.