BbQ.Events.SourceGenerators
1.0.12
See the version list below for details.
dotnet add package BbQ.Events.SourceGenerators --version 1.0.12
NuGet\Install-Package BbQ.Events.SourceGenerators -Version 1.0.12
<PackageReference Include="BbQ.Events.SourceGenerators" Version="1.0.12" />
<PackageVersion Include="BbQ.Events.SourceGenerators" Version="1.0.12" />
<PackageReference Include="BbQ.Events.SourceGenerators" />
paket add BbQ.Events.SourceGenerators --version 1.0.12
#r "nuget: BbQ.Events.SourceGenerators, 1.0.12"
#:package BbQ.Events.SourceGenerators@1.0.12
#addin nuget:?package=BbQ.Events.SourceGenerators&version=1.0.12
#tool nuget:?package=BbQ.Events.SourceGenerators&version=1.0.12
BbQ.Events.SourceGenerators
Source generators for BbQ.Events - Automatically discovers and registers event handlers and subscribers.
Overview
This package contains Roslyn source generators that automatically discover implementations of IEventHandler<TEvent> and IEventSubscriber<TEvent> in your project and generate registration code.
Features
- Automatic Discovery: Finds all event handlers and subscribers at compile-time
- Zero Configuration: No manual registration needed
- Type-Safe: Generates strongly-typed registration code
- Performance: No runtime reflection for handler discovery
Installation
This package is automatically included when you reference BbQ.Events.
Usage
The source generator automatically creates an extension method for your assembly:
services.AddYourAssemblyNameEventHandlers();
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);
}
// Registration (automatically generated)
services.AddInMemoryEventBus();
services.AddYourProjectNameEventHandlers(); // Auto-generated method
Generated Code
The generator creates a static class in the BbQ.Events.DependencyInjection namespace with an extension method that registers all discovered handlers:
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;
}
}
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# 12.0 or later
- BbQ.Events package
How It Works
The source generator:
- Scans your project for classes implementing
IEventHandler<TEvent>orIEventSubscriber<TEvent> - Generates registration code at compile-time
- Creates an extension method 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.