A lightweight, event publisher for .NET. Publish events with ease and automatically wire up event handlers via dependency injection.
- Publish/Subscribe pattern for decoupling event logic
- Automatic registration of event handlers via reflection
- Testable and composable
- Minimal, clean, no external dependencies
- Define an Event
public class UserRegisteredEvent : IEvent
{
public string Email { get; set; }
}- Create a Handler
public class SendWelcomeEmailHandler : IEventHandler<UserRegisteredEvent>
{
public Task HandleAsync(UserRegisteredEvent e)
{
Console.WriteLine($"Sending welcome email to {e.Email}");
return Task.CompletedTask;
}
}- Register Services
In Program.cs:
builder.Services.AddMiniEvents(Assembly.GetExecutingAssembly());OR
builder.Services.AddMiniEvents(typeof(Program).Assembly);- Publish Event
public class UserService
{
private readonly IEventPublisher _eventPublisher;
public UserService(IEventPublisher eventPublisher)
{
_eventPublisher = eventPublisher;
}
public void RegisterUser(string email)
{
// Logic to save user...
_eventPublisher.Publish(new UserRegisteredEvent { Email = email });
}
}To use AddMiniEvents, make sure to pass in the assembly or assemblies where your IEventHandler<> implementations are located. You can also pass in multiple assemblies if your handlers are located in different projects:
services.AddMiniEvents(
typeof(SendWelcomeEmailHandler).Assembly,
typeof(Program).Assembly);- Encourages separation of concerns
- Eliminates tight coupling between components
- Easy to test and reason about
YourProject/
βββ Events/
β βββ UserRegisteredEvent.cs
βββ Handlers/
β βββ SendWelcomeEmailHandler.cs
βββ Services/
βββ UserService.cs
Pull requests are welcome! If you find a bug or have a feature request, please open an issue.