Initial types and registration for Vertically library - #1
Merged
Merged
Conversation
Changed the IQuery and IHandler definitions to include TResult. Fixed up handler interfaces to match.
Implemented full registration and assembly scanning handlers, validators, and behaviors. Added decorator handler to chain decorators as needed.
…cement overrides). Implemented built-in behaviors: Logging, Timing, ExceptionToResult, Validation.
… builder pattern together.
Added unit test to cover the most cases in the Vertically library.
Added IAsyncValidator<T> interface to support async validators that need it. Updated registration to support IAsyncValidator. Updated ValidationBehavior to support IAsyncValidator in addition to IValidator. Updated unit tests.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Introduces D20Tek.Vertically, a UI-framework-agnostic library of contracts and helpers for building vertical slice architecture across Blazor, Web API, CLI, and future WPF/Avalonia apps. Multi-targets .NET 9 and .NET 10.
Core contracts
• Requests/handlers: ICommand, IQuery, ICommandHandler<,>, IQueryHandler<,>; all result-typed via D20Tek.Functional.Result.
• Validation: synchronous IValidator and a dedicated asynchronous IAsyncValidator; both discovered and composable (multiple validators per request).
• Optional feature discovery: IFeature for self-registering slices.
Pipeline & behaviors
• Decorator-based IPipelineBehavior<,> with RequestHandlerDelegate and an IScopedBehavior lifetime marker.
• Built-in behaviors: Logging, Timing, ExceptionToResult, Validation (sync + async), with safe null-logger handling.
• Global and per-handler behavior placement (AtOutermost, InsertBefore) via fluent builders.
Registration
• Single branded entry point AddVertically, placed in the Microsoft.Extensions.DependencyInjection namespace for zero-friction discoverability.
• Fluent grouped builders for handlers, validators, and behaviors; explicit registration plus feature-first assembly scanning with dedupe/conflict handling.
• Implementation types kept internal; BehaviorRegistry extracted from VerticallyBuilder for cohesion (both under the 100-line guideline).
Tests
• 80 passing MSTest tests (net10.0) with AAA labeling and exhaustive branch coverage.