BbQ.Cqrs.SourceGenerators
1.1.2
dotnet add package BbQ.Cqrs.SourceGenerators --version 1.1.2
NuGet\Install-Package BbQ.Cqrs.SourceGenerators -Version 1.1.2
<PackageReference Include="BbQ.Cqrs.SourceGenerators" Version="1.1.2" />
<PackageVersion Include="BbQ.Cqrs.SourceGenerators" Version="1.1.2" />
<PackageReference Include="BbQ.Cqrs.SourceGenerators" />
paket add BbQ.Cqrs.SourceGenerators --version 1.1.2
#r "nuget: BbQ.Cqrs.SourceGenerators, 1.1.2"
#:package BbQ.Cqrs.SourceGenerators@1.1.2
#addin nuget:?package=BbQ.Cqrs.SourceGenerators&version=1.1.2
#tool nuget:?package=BbQ.Cqrs.SourceGenerators&version=1.1.2
BbQ.Cqrs Source Generators
Source generators and analyzers for BbQ.Cqrs that automatically detect and register handlers and behaviors, reducing boilerplate code.
Features
- Handler Registration Generator: Automatically detects and registers handlers implementing
IRequestHandler<,>andIRequestHandler<>for commands and queries - Behavior Registration: Automatically register pipeline behaviors marked with
[Behavior(Order = ...)]attribute in the specified order - Analyzer: Prevents misuse of
[Behavior]attribute on behaviors with more than 2 type parameters
Installation
dotnet add package BbQ.Cqrs.SourceGenerators
Usage
Automatic Handler Detection
Handlers are automatically detected based on interface implementation. No attributes needed:
public class CreateUserCommand : ICommand<Outcome<User>>
{
public string Email { get; set; }
public string Name { get; set; }
}
// Handler is automatically detected
public class CreateUserCommandHandler : IRequestHandler<CreateUserCommand, Outcome<User>>
{
// Implementation...
}
Mark Behaviors for Automatic Registration
Only behaviors with the [Behavior] attribute are automatically registered:
[Behavior(Order = 1)]
public class LoggingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
where TRequest : IRequest<TResponse>
{
// Implementation...
}
Important: The [Behavior] attribute can only be used on behaviors with exactly 2 type parameters. Behaviors with additional type parameters (e.g., 3 or more) will trigger a compile-time error and must be registered manually.
Analyzer Rules
BBQCQRS001: Behavior attribute on class with incompatible type parameter count
This analyzer ensures that the [Behavior] attribute is only used on classes with exactly 2 type parameters that match IPipelineBehavior<TRequest, TResponse>.
Invalid:
// ❌ Error: ValidationBehavior has 3 type parameters
[Behavior(Order = 1)]
public class ValidationBehavior<TRequest, TResponse, TPayload> : IPipelineBehavior<TRequest, TResponse>
{
// This will cause a compile error
}
Valid:
// ✅ Correct: LoggingBehavior has exactly 2 type parameters
[Behavior(Order = 1)]
public class LoggingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
// This will compile and register correctly
}
The source generator will automatically detect and register these components.
| 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.