CleanArch.DevKit.Mediator.Validation 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package CleanArch.DevKit.Mediator.Validation --version 1.0.0
                    
NuGet\Install-Package CleanArch.DevKit.Mediator.Validation -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CleanArch.DevKit.Mediator.Validation" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CleanArch.DevKit.Mediator.Validation" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="CleanArch.DevKit.Mediator.Validation" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CleanArch.DevKit.Mediator.Validation --version 1.0.0
                    
#r "nuget: CleanArch.DevKit.Mediator.Validation, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CleanArch.DevKit.Mediator.Validation@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CleanArch.DevKit.Mediator.Validation&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=CleanArch.DevKit.Mediator.Validation&version=1.0.0
                    
Install as a Cake Tool

CleanArch.DevKit.Mediator.Validation

Validation fluide à la FluentValidation, découverte des validators à la compilation, intégration au pipeline du médiateur.

Rôle

Permet de déclarer des règles de validation par propriété dans une classe Validator<T>, puis de les exécuter automatiquement avant chaque handler grâce à un IPipelineBehavior<,>. Les validators sont découverts à la compilation par un générateur Roslyn — pas de scan d'assembly au runtime.

Installation

dotnet add package CleanArch.DevKit.Mediator.Validation

Le générateur Roslyn est embarqué dans le package.

Fonctionnalités

  • Déclarer un validator avec Validator<T> + Rule(...)
  • Composer des checks fluides (Required, Email, Between, Match, etc.)
  • Personnaliser le message et le code d'erreur
  • Appliquer une règle conditionnelle (When / Unless)
  • Contrôler la cascade (continuer ou s'arrêter au premier échec)
  • Déléguer à un sous-validator (SetValidator)
  • Valider une collection (RuleForEach)
  • Activer le ValidationBehavior dans le pipeline
  • Enregistrer tous les validators (générateur ou réflexion)

Déclarer un validator

public sealed class CreateUserValidator : Validator<CreateUser>
{
    public CreateUserValidator()
    {
        Rule(x => x.Email).Required().Email().MaxLength(200);
        Rule(x => x.Name).Required().MinLength(2).MaxLength(50);
        Rule(x => x.Age).Between(1, 149);
    }
}

Validator<T> implémente IValidator<T> ; les règles sont déclarées dans le constructeur.


Checks fluides disponibles

Catégorie Checks
Nullité / égalité NotNull, Equal, NotEqual, OneOf
Chaîne Required, MinLength, MaxLength, Length, Email, Match(regex)
Comparable GreaterThan, LessThan, Between
Custom Must(predicate), MustAsync(asyncPredicate)
Rule(x => x.Price).GreaterThan(0m).LessThan(10_000m);
Rule(x => x.Code).Match(@"^[A-Z]{3}-\d{4}$");
Rule(x => x.Status).OneOf("draft", "published", "archived");
Rule(x => x.Username).MustAsync(async (name, ct) => !await repo.ExistsAsync(name, ct));

Personnaliser message et code d'erreur

Les modifiers s'appliquent au check qui précède :

Rule(x => x.Age)
    .Between(1, 149)
    .Message("L'âge doit être réaliste.")
    .ErrorCode("user.age_unrealistic");

Appliquer une règle conditionnelle

Rule(x => x.CompanyTaxId)
    .Required()
    .When(x => x.Kind == CustomerKind.Business);

Rule(x => x.SsnNumber)
    .Required()
    .Unless(x => x.IsAnonymous);

Contrôler la cascade

Par défaut, tous les checks d'une règle s'exécutent et toutes les erreurs sont collectées. Cascade(CascadeMode.Stop) arrête au premier échec :

Rule(x => x.Email)
    .Cascade(CascadeMode.Stop)   // évite Email() si Required() échoue déjà
    .Required()
    .Email();

Le mode peut aussi être global pour tout le validator :

public sealed class StrictValidator : Validator<MyDto>
{
    public StrictValidator()
    {
        CascadeMode = CascadeMode.Stop;
        Rule(x => x.Field).Required().MinLength(3);
    }
}

Déléguer à un sous-validator

Pour valider un objet imbriqué, réutiliser un IValidator<T> existant :

public sealed class AddressValidator : Validator<Address>
{
    public AddressValidator()
    {
        Rule(x => x.Street).Required();
        Rule(x => x.City).Required();
    }
}

public sealed class OrderValidator : Validator<Order>
{
    public OrderValidator()
    {
        Rule(x => x.ShippingAddress).SetValidator(new AddressValidator());
    }
}

Pour une propriété nullable de type référence, envelopper avec ForNullable() :

Rule(x => x.BillingAddress).SetValidator(new AddressValidator().ForNullable());

Le wrapper court-circuite à Success quand la valeur est null.


Valider une collection

RuleForEach(x => x.Items).SetValidator(new OrderItemValidator());

Les échecs incluent l'index dans le chemin (Items[2].Quantity).


Activer le ValidationBehavior

Le behavior récupère tous les IValidator<TRequest> du container, les exécute en parallèle, agrège les échecs et lance une ValidationException si la requête est invalide. Sinon, le handler s'exécute normalement.

services.AddValidationBehavior();

Combiner avec CleanArch.DevKit.Mediator.Results pour convertir automatiquement la ValidationException en Result<T>.Fail(new ValidationError(...)) — voir AddResultBehavior().


Enregistrer les validators (générateur)

Le générateur émet une méthode AddValidators() qui inscrit tous les concrete Validator<T> du projet sans réflexion :

services.AddValidators();           // émis par le générateur
services.AddValidationBehavior();

Pour scanner une assembly externe (plugin chargé au runtime), utiliser la surcharge avec réflexion :

services.AddValidators(typeof(SomeValidator).Assembly);

Ou les deux d'un coup :

services.AddValidation(typeof(SomeValidator).Assembly);  // = AddValidators(asm) + AddValidationBehavior()
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on CleanArch.DevKit.Mediator.Validation:

Package Downloads
CleanArch.DevKit.Mediator.Results

Result<T> + Error model with railway-oriented extensions (Map / Bind / Match) and a ResultBehavior that auto-converts ValidationException into a ValidationError. Part of the CleanArch.DevKit set.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.1 114 5/17/2026
1.1.0 111 5/17/2026
1.0.0 112 5/15/2026
0.1.0-preview.1 51 5/14/2026