Novolis.Messaging
2026.1.1.48
dotnet add package Novolis.Messaging --version 2026.1.1.48
NuGet\Install-Package Novolis.Messaging -Version 2026.1.1.48
<PackageReference Include="Novolis.Messaging" Version="2026.1.1.48" />
<PackageVersion Include="Novolis.Messaging" Version="2026.1.1.48" />
<PackageReference Include="Novolis.Messaging" />
paket add Novolis.Messaging --version 2026.1.1.48
#r "nuget: Novolis.Messaging, 2026.1.1.48"
#:package Novolis.Messaging@2026.1.1.48
#addin nuget:?package=Novolis.Messaging&version=2026.1.1.48
#tool nuget:?package=Novolis.Messaging&version=2026.1.1.48
Novolis.Messaging
Pulse-based in-process messaging (PulseFlow): pulses are written to a Channel<IPulse>, consumed by PulseNexus (BackgroundService), and dispatched to registered IFlow instances.
Install
dotnet add package Novolis.Messaging
Prerequisites: .NET 10 SDK (net10.0).
Depends on Novolis.Messaging.Channels.
Quick start — handler flow
using Novolis.Messaging;
public sealed record TimerPulse(string Label) : BasePulse;
public sealed class TimerHandler : IPulseHandler<TimerPulse>
{
public Task HandleAsync(TimerPulse pulse, CancellationToken cancellationToken)
=> Task.CompletedTask;
}
services.AddPulseFlow<TimerPulse, TimerHandler>();
Quick start — custom flow
public sealed class MyFlow : IFlow
{
public bool CanHandle(Type pulseType) => pulseType == typeof(MyPulse);
public Task HandleAsync(IPulse pulse, CancellationToken cancellationToken) => Task.CompletedTask;
}
services.AddPulseFlow(builder => builder.AddFlow<MyFlow>());
// shorthand: services.AddPulseFlow<MyFlow>();
Send pulses from any service:
await conduit.SendAsync(new TimerPulse("tick"), cancellationToken);
Multiple handlers for the same pulse type are supported (AddPulseFlow<TPulse, THandler2>()). Unmatched pulses and flow faults can be observed via ConfigurePulseFlowDiagnostics.
API
| Type | Role |
|---|---|
IPulse / BasePulse |
Pulse identity (Id, Created) |
IPulseHandler<T> |
Typed handler for a pulse |
IFlow |
Multi-pulse dispatcher (CanHandle, HandleAsync) |
IFlowBuilder |
AddFlow<T>() during registration |
IConduit |
SendAsync(IPulse, CancellationToken) |
ServiceCollectionExtensions.AddPulseFlow |
Register flows + hosted PulseNexus |
ConfigurePulseFlowDiagnostics |
Unmatched/fault callbacks |
IncompatibleFlowException |
Thrown on pulse type mismatch in a flow |
Related
| Package | Role |
|---|---|
Novolis.Messaging.Channels |
Channel<T> DI registration |
Novolis.Messaging.Abstractions |
Typed pub/sub envelope (separate model) |
More documentation
Support
Pre-release API; flows require matching pulse types or IncompatibleFlowException is thrown.
| 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
- Microsoft.Extensions.DependencyInjection (>= 10.0.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Options (>= 10.0.12)
- Novolis.Messaging.Channels (>= 2026.1.1.48)
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 |
|---|---|---|
| 2026.1.1.48 | 88 | 10/5/2026 |
| 2026.1.1.47 | 81 | 10/4/2026 |
| 2026.1.1.46 | 78 | 10/1/2026 |
| 2026.1.1.45 | 79 | 9/30/2026 |