NetEvolve.Pulse
0.3.0
Prefix Reserved
dotnet add package NetEvolve.Pulse --version 0.3.0
NuGet\Install-Package NetEvolve.Pulse -Version 0.3.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NetEvolve.Pulse" Version="0.3.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NetEvolve.Pulse" Version="0.3.0" />
<PackageReference Include="NetEvolve.Pulse" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add NetEvolve.Pulse --version 0.3.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: NetEvolve.Pulse, 0.3.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package NetEvolve.Pulse@0.3.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=NetEvolve.Pulse&version=0.3.0
#tool nuget:?package=NetEvolve.Pulse&version=0.3.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
NetEvolve.Pulse
NetEvolve.Pulse is a high-performance CQRS mediator for ASP.NET Core that wires commands, queries, and events through a scoped, interceptor-enabled pipeline.
Features
- Typed CQRS mediator with single-handler enforcement for commands and queries plus fan-out events
- Minimal DI integration via
services.AddPulse(...)with scoped lifetimes for handlers and interceptors - Configurable interceptor pipeline (logging, metrics, tracing, validation) via
IMediatorConfigurator - Parallel event dispatch for efficient domain event broadcasting
- TimeProvider-aware for deterministic testing and scheduling scenarios
- OpenTelemetry-friendly metrics and tracing through
AddActivityAndMetrics()
Installation
NuGet Package Manager
Install-Package NetEvolve.Pulse
.NET CLI
dotnet add package NetEvolve.Pulse
PackageReference
<PackageReference Include="NetEvolve.Pulse" Version="x.x.x" />
Quick Start
using Microsoft.Extensions.DependencyInjection;
using NetEvolve.Pulse;
using NetEvolve.Pulse.Extensibility;
var services = new ServiceCollection();
// Register Pulse and handlers
services.AddPulse();
services.AddScoped<ICommandHandler<CreateOrderCommand, OrderCreated>, CreateOrderHandler>();
using var provider = services.BuildServiceProvider();
var mediator = provider.GetRequiredService<IMediator>();
var result = await mediator.SendAsync<CreateOrderCommand, OrderCreated>(
new CreateOrderCommand("SKU-123"));
Console.WriteLine($"Created order {result.OrderId}");
public record CreateOrderCommand(string Sku) : ICommand<OrderCreated>;
public record OrderCreated(Guid OrderId);
public sealed class CreateOrderHandler
: ICommandHandler<CreateOrderCommand, OrderCreated>
{
public Task<OrderCreated> HandleAsync(
CreateOrderCommand command,
CancellationToken cancellationToken) =>
Task.FromResult(new OrderCreated(Guid.NewGuid()));
}
Usage
Basic Example
services.AddPulse();
services.AddScoped<IQueryHandler<GetOrderQuery, Order>, GetOrderHandler>();
services.AddScoped<IEventHandler<OrderCreatedEvent>, OrderCreatedHandler>();
var order = await mediator.QueryAsync<GetOrderQuery, Order>(new GetOrderQuery(orderId));
await mediator.PublishAsync(new OrderCreatedEvent(order.Id));
public record GetOrderQuery(Guid Id) : IQuery<Order>;
public record Order(Guid Id, string Sku);
public record OrderCreatedEvent(Guid Id) : IEvent;
public sealed class GetOrderHandler : IQueryHandler<GetOrderQuery, Order>
{
public Task<Order> HandleAsync(GetOrderQuery query, CancellationToken cancellationToken) =>
Task.FromResult(new Order(query.Id, "SKU-123"));
}
public sealed class OrderCreatedHandler : IEventHandler<OrderCreatedEvent>
{
public Task HandleAsync(OrderCreatedEvent @event, CancellationToken cancellationToken)
{
// React to the event (logging, projections, etc.)
return Task.CompletedTask;
}
}
Advanced Example
// Enable tracing and metrics and add custom interceptors
services.AddPulse(config =>
{
config.AddActivityAndMetrics();
});
services.AddScoped<ICommandHandler<ShipOrderCommand, Void>, ShipOrderHandler>();
public record ShipOrderCommand(Guid Id) : ICommand;
public sealed class ShipOrderHandler : ICommandHandler<ShipOrderCommand, Void>
{
public Task<Void> HandleAsync(ShipOrderCommand command, CancellationToken cancellationToken)
{
// Shipping workflow here
return Task.FromResult(Void.Completed);
}
}
Configuration
// Configure Pulse during startup
services.AddPulse(config =>
{
// Built-in observability
config.AddActivityAndMetrics();
// Add your own configurator extensions for validation, caching, etc.
// config.AddCustomValidation();
});
Requirements
- .NET 8.0, .NET 9.0, or .NET 10.0
- ASP.NET Core environment with
Microsoft.Extensions.DependencyInjection - OpenTelemetry packages when using
AddActivityAndMetrics()
Related Packages
- NetEvolve.Pulse.Extensibility - Core contracts and abstractions used by the mediator
Documentation
For complete documentation, please visit the official documentation.
Contributing
Contributions are welcome! Please read the Contributing Guidelines before submitting a pull request.
Support
- Issues: Report bugs or request features on GitHub Issues
- Documentation: Read the full documentation at https://github.com/dailydevops/pulse
License
This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ by the NetEvolve Team
| 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 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- NetEvolve.Pulse.Extensibility (>= 0.3.0)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.1)
- NetEvolve.Pulse.Extensibility (>= 0.3.0)
-
net9.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.1)
- NetEvolve.Pulse.Extensibility (>= 0.3.0)
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.0 | 59 | 1/11/2026 |