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

66 lines
3.4 KiB
Markdown

# Changelog
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [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.Result``Geekeey.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
[1.0.0]: https://code.geekeey.de/geekeey/request/releases/tag/1.0.0
[1.1.0]: https://code.geekeey.de/geekeey/request/releases/tag/1.1.0
[2.0.0]: https://code.geekeey.de/geekeey/request/releases/tag/2.0.0
[Unreleased]: https://code.geekeey.de/geekeey/request/compare/2.0.0...HEAD