request/CHANGELOG.md
Louis Seubert f9de3a99de
feat(dispatcher): add registration-time pipeline behavior ordering via AddBehavior<T>(order:)
Pipeline behavior ordering previously depended on discovery/registration
order. Add an AddBehavior<T>(order:) API that captures the order at
registration time; the BehaviorTypeIndex now orders matching behaviors by
that explicit order (lower runs first), falling back to registration order
for ties. Removed the runtime Order property approach.
2026-07-12 21:58:49 +02:00

3.4 KiB

Changelog

All notable changes to this project will be documented in this file.

This project adheres to Semantic Versioning.

1.0.0 - 2026-05-26

Added

  • request.dispatcher: Core mediator pattern implementation with async request/response handling
  • request.result: Optional result wrapper types (Result<T>) for structured responses
  • request.validation: Automatic validation pipeline behavior with FluentValidation integration

1.1.0 - 2026-05-28

Added

  • request.validation: Dependency injection support for validators via IServiceCollection.AddValidation()
  • request.validation: IValidatorBuilder for fluent validator registration and assembly scanning
  • request.validation: Support for open generic validators and automatic closing during resolution
  • request.validation: Validate<T> extension method for simplified validator invocation

Changed

  • request.dispatcher: Reset type caches when reloading assemblies
  • request.validation: Reset type caches when reloading assemblies

2.0.0 - 2026-05-30

Breaking changes

To have a consistent experience across all packages, some public interfaces have been renamed.

Changed

  • request.dispatcher: Hide pipeline internals in stack frames
  • request.validation: Rename IValidatorBuilder to IRequestValidatorBuilder incl. extensions methods

Unreleased

Added

  • request.validation: Support PropertyPath JSON converter for string values and dictionary property names

Changed

  • request.result: Document that Result/Result<T> equality treats any two failures as equal, ignoring error content; branch on the Error directly for failure-specific logic

Fixed

  • request.result: Correct the namespace in the Prelude doc comment (Geekeey.Extensions.ResultGeekeey.Request.Result)
  • request.result: Fold IsSuccess into Result<T>.GetHashCode to avoid collisions between a failure and a success value whose hash is 0
  • request.validation: Guard null comparison bounds in GreaterThan/LessThan/Between etc. so a null bound no longer throws (NullReferenceException)
  • request.validation: Return no problems when validating a null instance of a reference type instead of dereferencing it (NullReferenceException)
  • request.validation: Make Severity meaningful — Validation.IsValid now only fails on Error problems; Warning/Info no longer invalidate. Added Validation.IsValidFor(Severity) to set the failing-severity threshold
  • request.dispatcher: Throw InvalidOperationException listing candidates when multiple handlers match a request instead of silently resolving via .First(). Also throws when no handler is registered
  • request.dispatcher: Resolve handlers/behaviors in registration order across closed and open generics instead of the fixed closed-before-open reflection order
  • request.dispatcher: Add AddBehavior<T>(order:) registration-time API so pipeline behavior ordering is explicit and deterministic (lower order runs first, registration order as tie-break) instead of relying on reflection/discovery order

Removed