BbQ.Events.SourceGenerators
1.1.0
See the version list below for details.
dotnet add package BbQ.Events.SourceGenerators --version 1.1.0
NuGet\Install-Package BbQ.Events.SourceGenerators -Version 1.1.0
<PackageReference Include="BbQ.Events.SourceGenerators" Version="1.1.0" />
<PackageVersion Include="BbQ.Events.SourceGenerators" Version="1.1.0" />
<PackageReference Include="BbQ.Events.SourceGenerators" />
paket add BbQ.Events.SourceGenerators --version 1.1.0
#r "nuget: BbQ.Events.SourceGenerators, 1.1.0"
#:package BbQ.Events.SourceGenerators@1.1.0
#addin nuget:?package=BbQ.Events.SourceGenerators&version=1.1.0
#tool nuget:?package=BbQ.Events.SourceGenerators&version=1.1.0
BbQ.Events.SourceGenerators
Source generators for BbQ.Events - Automatically discovers and registers event handlers, subscribers, and projection handlers.
Overview
This package contains Roslyn source generators that automatically discover implementations of IEventHandler<TEvent>, IEventSubscriber<TEvent>, IProjectionHandler<TEvent>, IPartitionedProjectionHandler<TEvent>, and IProjectionBatchHandler<TEvent> in your project and generate registration code.
Features
- Automatic Discovery: Finds all event handlers, subscribers, and projection handlers at compile-time
- Zero Configuration: No manual registration needed
- Type-Safe: Generates strongly-typed registration code
- Performance: No runtime reflection for handler discovery
- Projection Support: Discovers and registers all three projection handler types
Installation
This package is automatically included when you reference BbQ.Events.
Usage
The source generator automatically creates extension methods for your assembly:
services.AddYourAssemblyNameEventHandlers(); // Registers event handlers and subscribers
services.AddYourAssemblyNameProjections(); // Registers projection handlers
Example
// Your event handler
public class SendWelcomeEmailHandler : IEventHandler<UserCreated>
{
public Task Handle(UserCreated @event, CancellationToken ct)
{
// Handle the event
return Task.CompletedTask;
}
}
// Your event subscriber
public class UserAnalyticsSubscriber : IEventSubscriber<UserCreated>
{
private readonly IEventBus _eventBus;
public UserAnalyticsSubscriber(IEventBus eventBus)
{
_eventBus = eventBus;
}
public IAsyncEnumerable<UserCreated> Subscribe(CancellationToken ct)
=> _eventBus.Subscribe<UserCreated>(ct);
}
// Your projection handler (also auto-discovered)
[Projection("UserProfile")]
public class UserProfileProjection : IProjectionHandler<UserCreated>
{
public Task HandleAsync(UserCreated @event, CancellationToken ct)
{
// Update read model...
return Task.CompletedTask;
}
}
// Registration (automatically generated)
services.AddInMemoryEventBus();
services.AddYourProjectNameEventHandlers(); // Auto-generated method
services.AddYourProjectNameProjections(); // Auto-generated method for projections
Generated Code
The generator creates a static class in the BbQ.Events.Configuration namespace with extension methods that register all discovered handlers and projections:
public static class GeneratedYourAssemblyEventRegistrationExtensions
{
public static IServiceCollection AddYourAssemblyEventHandlers(
this IServiceCollection services,
ServiceLifetime handlersLifetime = ServiceLifetime.Scoped)
{
// Registers all IEventHandler<TEvent> implementations
// Registers all IEventSubscriber<TEvent> implementations
return services;
}
public static IServiceCollection AddYourAssemblyProjections(
this IServiceCollection services)
{
// Registers all IProjectionHandler<TEvent> implementations
// Registers all IPartitionedProjectionHandler<TEvent> implementations
// Registers all IProjectionBatchHandler<TEvent> implementations
return services;
}
}
Customization
Handler Lifetime
By default, handlers are registered with ServiceLifetime.Scoped. You can change this:
services.AddYourAssemblyEventHandlers(ServiceLifetime.Transient);
Requirements
- .NET 8.0 or later
- C# 11 or later
- BbQ.Events package
How It Works
The source generator:
- Scans your project for classes implementing
IEventHandler<TEvent>,IEventSubscriber<TEvent>,IProjectionHandler<TEvent>,IPartitionedProjectionHandler<TEvent>, orIProjectionBatchHandler<TEvent> - Generates registration code at compile-time
- Creates extension methods specific to your assembly name
- No runtime reflection or assembly scanning required
License
This project is licensed 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 | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. 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.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.