CleanArch.Mediator.AspNetCore
0.3.1
dotnet add package CleanArch.Mediator.AspNetCore --version 0.3.1
NuGet\Install-Package CleanArch.Mediator.AspNetCore -Version 0.3.1
<PackageReference Include="CleanArch.Mediator.AspNetCore" Version="0.3.1" />
<PackageVersion Include="CleanArch.Mediator.AspNetCore" Version="0.3.1" />
<PackageReference Include="CleanArch.Mediator.AspNetCore" />
paket add CleanArch.Mediator.AspNetCore --version 0.3.1
#r "nuget: CleanArch.Mediator.AspNetCore, 0.3.1"
#:package CleanArch.Mediator.AspNetCore@0.3.1
#addin nuget:?package=CleanArch.Mediator.AspNetCore&version=0.3.1
#tool nuget:?package=CleanArch.Mediator.AspNetCore&version=0.3.1
CleanArchitecture Mediator AspNetCore
CleanArch.Mediator.AspNetCore provides seamless integration between ASP.NET Core, Mediator request/response architecture, and Clean Architecture principles.
It is designed to eliminate boilerplate, enable automatic endpoint discovery, support pipeline behaviors, and provide clean separation between Application and Infrastructure layers.
This package is ideal for Vertical Slice Architecture, Clean Architecture, and modular monolith designs.
β¨ Features
- π Automatic command/query endpoint mapping using attributes
- 𧬠Pipeline behaviors (logging, validation, performance tracking, etc.)
- β Clean separation of concerns β no ASP.NET Core dependencies in the Application layer
- π Convention-based endpoint discovery (Minimal APIs or Controllers)
- π― Zero boilerplate wiring
- π¨ Custom exception β HTTP result mapping
- π Perfect for vertical slices
π¦ Installation
dotnet add package CleanArch.Mediator.AspNetCore
π Quick Start
Register Mediator and your Application Assemblies
builder.AddMediator([ typeof(Create).Assembly ]);
Thatβs it β all commands/queries with HttpEndpointAttribute get mapped automatically.
π§© Defining a Command With an Endpoint
Command
public sealed record CreateUserCommand(string Name, string Email) : ICommand<UserDto>;
Handler
public sealed class CreateUserHandler : ICommandHandler<CreateUserCommand, UserDto>
{
public Task<UserDto> Handle(CreateUserCommand request, CancellationToken cancellationToken)
{
return Task.FromResult(new UserDto(request.Name, request.Email));
}
}
π Creating a Query With Route Parameters
[HttpEndpoint(Method = HttpMethod.Get, Route = "users/{id}")]
public sealed record GetUserByIdQuery(Guid Id)
: IRequest<UserDto>;
Handler:
public sealed class GetUserByIdHandler: IRequestHandler<GetUserByIdQuery, UserDto>
{
public Task<UserDto> Handle(GetUserByIdQuery request, CancellationToken ct)
{
// Fetch user from DB
return Task.FromResult(new UserDto("John", "john@example.com"));
}
}
π§ Pipeline Behavior Example
public class LoggingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
public async Task<TResponse> Handle(
TRequest request,
RequestHandlerDelegate<TResponse> next,
CancellationToken cancellationToken)
{
Console.WriteLine($"Executing {typeof(TRequest).Name}...");
var response = await next();
Console.WriteLine($"Finished {typeof(TRequest).Name}");
return response;
}
}
Register using AddMediator:
builder.Services.AddMediator(opts =>
{
opts.AddBehavior(typeof(LoggingBehavior<,>));
});
𧨠Exception β HTTP Result Mapping
public class UserNotFoundException : Exception;
public class UserNotFoundExceptionMapper
: IExceptionMapper<UserNotFoundException>
{
public IResult Map(UserNotFoundException exception)
{
return Results.NotFound(new { message = "User not found" });
}
}
Automatically discovered when AddMediatorAspNetCore() is used.
π Suggested Folder Structure
src/
βββ Users/
β βββ CreateUser/
β β βββ CreateUserCommand.cs
β β βββ CreateUserHandler.cs
β βββ GetUserById/
β β βββ GetUserByIdQuery.cs
β β βββ GetUserByIdHandler.cs
Keeps each vertical slice isolated and maintainable.
π€ Contributing
Pull requests and discussions are welcome!
Please ensure new features include tests and follow Clean Architecture best practices.
π License
This project is licensed under the MIT License. See the LICENSE file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- CleanArch.Mediator (>= 0.3.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.3.1 | 461 | 12/11/2025 |