ResQ.BuildingBlocks.Application
0.2.0
dotnet add package ResQ.BuildingBlocks.Application --version 0.2.0
NuGet\Install-Package ResQ.BuildingBlocks.Application -Version 0.2.0
<PackageReference Include="ResQ.BuildingBlocks.Application" Version="0.2.0" />
<PackageVersion Include="ResQ.BuildingBlocks.Application" Version="0.2.0" />
<PackageReference Include="ResQ.BuildingBlocks.Application" />
paket add ResQ.BuildingBlocks.Application --version 0.2.0
#r "nuget: ResQ.BuildingBlocks.Application, 0.2.0"
#:package ResQ.BuildingBlocks.Application@0.2.0
#addin nuget:?package=ResQ.BuildingBlocks.Application&version=0.2.0
#tool nuget:?package=ResQ.BuildingBlocks.Application&version=0.2.0
ResQ.BuildingBlocks.Application
The application core (outer ring) — orchestration contracts, driven ports, and cross-cutting behaviors. Depends only on ResQ.BuildingBlocks.Domain.
- CQRS contracts:
ICommand/ICommand<T>/IQuery<T>+ their handlers (own mediator abstraction — no third-party pipeline dependency, so no licensing surprises). - Driven ports (the Core owns these; adapters implement them):
IUnitOfWork,IClock,IDomainEventDispatcher. - Pipeline behaviors:
IPipelineBehavior<TRequest,TResponse>+ValidationBehavior(FluentValidation) andLoggingBehavior. - Dispatch:
ISender/Senderroute each request to its single handler through the ordered behavior chain;IDomainEventHandler<TEvent>+DomainEventDispatcherfan domain events out to their handlers by runtime type. - Persistence ports:
IRepository<TAggregate,TId>/IReadRepository<TAggregate,TId>and an EF-freeISpecification<T>/Specification<T>(criteria, includes, ordering, paging, tracking) — adapters translate the specification onto their query engine. - Pagination:
OffsetPage<T>(page/size/total) and the experimentalCursorPage<T>(keyset). - Integration ports (shared by the messaging and persistence adapters, so neither references the other):
IntegrationEvent,IIntegrationEventPublisher,IMessageSerializer,IIntegrationEventTypeRegistry,IIdempotencyStore.
public sealed record CreateWidget(string Sku) : ICommand<Guid>;
internal sealed class CreateWidgetHandler(IWidgetRepository repo, IUnitOfWork uow)
: ICommandHandler<CreateWidget, Guid>
{
public async Task<Result<Guid>> Handle(CreateWidget command, CancellationToken ct)
{
var widget = Widget.Create(command.Sku);
if (widget.IsFailure) return Result.Failure<Guid>(widget.Error);
repo.Add(widget.Value);
await uow.SaveChangesAsync(ct);
return widget.Value.Id;
}
}
Apache-2.0 · part of resq-software/dotnet.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- FluentValidation (>= 11.11.0)
- FluentValidation.DependencyInjectionExtensions (>= 11.11.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
- ResQ.BuildingBlocks.Domain (>= 0.2.0)
- Scrutor (>= 5.0.1)
- System.Text.Json (>= 9.0.19)
-
net9.0
- FluentValidation (>= 11.11.0)
- FluentValidation.DependencyInjectionExtensions (>= 11.11.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
- ResQ.BuildingBlocks.Domain (>= 0.2.0)
- Scrutor (>= 5.0.1)
- System.Text.Json (>= 9.0.19)
NuGet packages (6)
Showing the top 5 NuGet packages that depend on ResQ.BuildingBlocks.Application:
| Package | Downloads |
|---|---|
|
ResQ.BuildingBlocks.Adapters.Messaging
Broker-agnostic messaging adapter — implements the application's integration-event ports over an in-memory System.Threading.Channels transport, with System.Text.Json serialization, a concurrency-bounded and idempotent BackgroundService consumer (Polly retry + dead-lettering), and DI wiring. Ships no broker client. |
|
|
ResQ.BuildingBlocks.ServiceDefaults
Aspire-style cross-cutting service defaults — one call wires OpenTelemetry (traces, metrics, logs), health checks, service discovery, standard HTTP resilience, and a testable IClock. Also ships the CQRS observability pipeline behaviors (tracing + metrics), strongly-typed options registration, and a Polly resilience-pipeline helper keyed on the domain ErrorType. |
|
|
ResQ.BuildingBlocks.Adapters.Web
HTTP driving adapter for the ResQ building blocks — a minimal-API surface that maps the Result/Error model to RFC 7807 ProblemDetails, plus endpoint discovery, FluentValidation endpoint filters, correlation middleware, API versioning, OpenAPI/Scalar, a config-bound CORS allowlist, and one ordered AddResqWeb/UseResqWeb wiring. Depends only on the application and domain cores. |
|
|
ResQ.BuildingBlocks.Adapters.Persistence
EF Core 9 persistence adapter — the scoped EfUnitOfWork that dispatches domain events before saving, a specification-driven Repository/ReadRepository, an audit interceptor, and a transactional outbox plus inbox idempotency. Provider-agnostic (references only EF Core + Relational); depends only on the application and domain cores. |
|
|
ResQ.BuildingBlocks.Testing
Lightweight, dependency-free test doubles for the ResQ building blocks — deterministic clock, unit-of-work fakes, recording dispatchers/publishers, a fluent test-data Builder, capturing/xUnit logger providers, hexagon dependency-rule data, and a one-call test-double registration helper. No Docker or ASP.NET; safe for any unit-test project. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.2.0 | 380 | 8/16/2026 |