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.
3.4 KiB
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:
IValidatorBuilderfor 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
IValidatorBuildertoIRequestValidatorBuilderincl. extensions methods
Unreleased
Added
- request.validation: Support
PropertyPathJSON 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 theErrordirectly for failure-specific logic
Fixed
- request.result: Correct the namespace in the
Preludedoc comment (Geekeey.Extensions.Result→Geekeey.Request.Result) - request.result: Fold
IsSuccessintoResult<T>.GetHashCodeto avoid collisions between a failure and a success value whose hash is0 - request.validation: Guard null comparison bounds in
GreaterThan/LessThan/Betweenetc. so anullbound no longer throws (NullReferenceException) - request.validation: Return no problems when validating a
nullinstance of a reference type instead of dereferencing it (NullReferenceException) - request.validation: Make
Severitymeaningful —Validation.IsValidnow only fails onErrorproblems;Warning/Infono longer invalidate. AddedValidation.IsValidFor(Severity)to set the failing-severity threshold - request.dispatcher: Throw
InvalidOperationExceptionlisting 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