request/CHANGELOG.md
Louis Seubert 8099898f3d
fix(dispatcher): resolve handlers in registration order across closed and open generics
Handler/behavior resolution previously forced closed generics before open
generics regardless of registration order, which was surprising and fragile.
TypeIndex now tracks each registered type's index and orders matching
candidates by registration order, so closed/open ordering is deterministic
and follows registration.
2026-07-12 21:58:47 +02:00

3.2 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

Removed