An implementation of the mediator pattern in .NET using source-generation.
Install
| Product | Versions |
|---|---|
| .NET |
README
Immediate.Apis
Immediate.Apis is a source generator for minimal APIs, for
Immediate.Handlers handlers. Simply add a [MapGet] to the
[Handler] class and an endpoint will automatically be added.
Examples
Installing Immediate.Apis
You can install Immediate.Apis with NuGet:
Install-Package Immediate.Apis
Or via the .NET Core command line interface:
dotnet add package Immediate.Apis
Either commands, from Package Manager Console or .NET Core CLI, will download and install Immediate.Handlers.
Using Immediate.Apis
Creating an Endpoint
Create a Handler and an endpoint by adding the following code:
[Handler]
[MapGet("/users")]
public static partial class GetUsersQuery
{
public record Query;
private static ValueTask<IEnumerable<User>> HandleAsync(
Query _,
UsersService usersService,
CancellationToken token)
{
return usersService.GetUsers();
}
}
Registering the endpoints
In your Program.cs, add a call to app.MapXxxEndpoints(), where Xxx is the shortened form of the project name.
- For a project named
Web, it will beapp.MapWebEndpoints() - For a project named
Application.Web, it will beapp.MapApplicationWebEndpoints()
Customizing the endpoints
Authorization
The [AllowAnonymous] and [Authorized("Policy")] attributes are supported and will be applied to the endpoint.
[Handler]
[MapGet("/users")]
[AllowAnonymous]
public static partial class GetUsersQuery
{
public record Query;
private static ValueTask<IEnumerable<User>> HandleAsync(
Query _,
UsersService usersService,
CancellationToken token)
{
return usersService.GetUsers();
}
}
Additional Customization
Additional customization of the endpoint registration can be done by adding a CustomizeEndpoint method.
[Handler]
[MapGet("/users")]
[Authorize(Policies.UserManagement)]
public static partial class GetUsersQuery
{
internal static void CustomizeGetFeaturesEndpoint(IEndpointConventionBuilder endpoint)
=> endpoint
.Produces<IEnumerable<User>>(StatusCodes.Status200OK)
.ProducesValidationProblem()
.ProducesProblem(StatusCodes.Status500InternalServerError)
.WithTags(nameof(User));
public record Query;
private static ValueTask<IEnumerable<User>> HandleAsync(
Query _,
UsersService usersService,
CancellationToken token)
{
return usersService.GetUsers();
}
}
Changes from Previous Version
Adoption Assessment
Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.
Related Guides & Workflows
Learn how to evaluate, integrate, or audit this package in your .NET project.