NexumPack.Fluxor
1.0.2
dotnet add package NexumPack.Fluxor --version 1.0.2
NuGet\Install-Package NexumPack.Fluxor -Version 1.0.2
<PackageReference Include="NexumPack.Fluxor" Version="1.0.2" />
<PackageVersion Include="NexumPack.Fluxor" Version="1.0.2" />
<PackageReference Include="NexumPack.Fluxor" />
paket add NexumPack.Fluxor --version 1.0.2
#r "nuget: NexumPack.Fluxor, 1.0.2"
#:package NexumPack.Fluxor@1.0.2
#addin nuget:?package=NexumPack.Fluxor&version=1.0.2
#tool nuget:?package=NexumPack.Fluxor&version=1.0.2
<img src="https://raw.githubusercontent.com/lucaseduardocrp/Fluxor/refs/heads/master/assets/fluxor-icon.png" alt="NexumPack Fluxor Logo" width="200px" />
Fluxor
A lightweight and extensible library for managing data flow and events in .NET applications, inspired by MediatR. Ideal for CQRS-based architectures, promoting separation of concerns and enhancing maintainability and scalability.
Package | Version | Popularity |
---|---|---|
NexumPack.Fluxor |
⭐ Give it a star
If you find this project helpful, consider giving it a ⭐ on GitHub to support the development.
Features
- ✅ Lightweight and modular
- ✅ Supports command, event, and query handlers
- ✅ DI-ready with automatic registration
- ✅ Clear separation of concerns
- ✅ Based on
Microsoft.Extensions.DependencyInjection
🚀 Getting Started
Installation
Via .NET CLI:
dotnet add package NexumPack.Fluxor
Using Contracts-Only Package
To reference only the contracts for Fluxor, which includes:
IRequest
(including generic variants)- Represents a command or query that expects a single response
INotification
- Represents an event broadcast to multiple handlers (if any)
Advanced Usage: Request + Notification
This example demonstrates how to combine a Request
(command/query) and a Notification
(event) in a real-world use case.
✅ This scenario uses only
Microsoft.Extensions.DependencyInjection.Abstractions
for DI registration — no framework-specific packages.
1. Define the Request and Notification
public class CreateCustomerCommand : IRequest<string>
{
public string Name { get; set; }
}
public class CustomerCreatedEvent : INotification
{
public Guid CustomerId { get; }
public CustomerCreatedEvent(Guid customerId)
{
CustomerId = customerId;
}
}
2. Implement the Handlers
public class CreateCustomerHandler : IRequestHandler<CreateCustomerCommand, string>
{
private readonly IMediator _mediator;
public CreateCustomerHandler(IMediator mediator)
{
_mediator = mediator;
}
public async Task<string> Handle(CreateCustomerCommand request, CancellationToken cancellationToken)
{
var id = Guid.NewGuid();
// Simulate persistence...
// Publish event
await _mediator.Publish(new CustomerCreatedEvent(id), cancellationToken);
return $"Customer '{request.Name}' created with ID {id}";
}
}
public class SendWelcomeEmailHandler : INotificationHandler<CustomerCreatedEvent>
{
public Task Handle(CustomerCreatedEvent notification, CancellationToken cancellationToken)
{
Console.WriteLine($"Sending welcome email to customer {notification.CustomerId}");
return Task.CompletedTask;
}
}
3. Register the Handlers (Dependency Injection)
You can register everything manually if you want full control:
services.AddSingleton<IMediator, Mediator>();
services.AddTransient<IRequestHandler<CreateCustomerCommand, string>, CreateCustomerHandler>();
services.AddTransient<INotificationHandler<CustomerCreatedEvent>, SendWelcomeEmailHandler>();
Or use assembly scanning with:
services.AddFluxor();
4. Execute the Flow
public class CustomerAppService
{
private readonly IMediator _mediator;
public CustomerAppService(IMediator mediator)
{
_mediator = mediator;
}
public async Task<string> CreateCustomer(string name)
{
return await _mediator.Send(new CreateCustomerCommand { Name = name });
}
}
When the CreateCustomer
method is called:
CreateCustomerHandler
handles the request- It creates and persists the customer (simulated)
- It publishes a
CustomerCreatedEvent
SendWelcomeEmailHandler
handles the event
This structure cleanly separates commands (which change state and return a result) from notifications (which communicate to the rest of the system that something happened).
Features
- Lightweight: Minimal dependencies and straightforward setup.
- In-Process Messaging: Facilitates in-process communication between components.
- Handler Registration: Automatically registers handlers from specified assemblies.
Compatibility
NexumPack.Fluxor targets .NET Standard 2.1, and is compatible with .NET Core 3.1+, .NET 5+, .NET 6+, .NET 7+, .NET 8, NET 9 and newer versions of the .NET runtime.
About
NexumPack.Fluxor was developed by Lucas Eduardo under the MIT license.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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 was computed. 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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Microsoft.Extensions.DependencyInjection (>= 9.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Versão inicial com suporte básico a containers de estado e injeção de dependência.