Multiple handlers for the same request were previously resolved via .First(), with ordering depending on Type.GetInterfaces() order (non-deterministic). Now ScalarRequestInvoker/StreamRequestInvoker throw InvalidOperationException listing the candidate handlers when more than one matches.
3 KiB
3 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