Scribbly.Broker
0.1.2
dotnet add package Scribbly.Broker --version 0.1.2
NuGet\Install-Package Scribbly.Broker -Version 0.1.2
<PackageReference Include="Scribbly.Broker" Version="0.1.2" />
<PackageVersion Include="Scribbly.Broker" Version="0.1.2" />
<PackageReference Include="Scribbly.Broker" />
paket add Scribbly.Broker --version 0.1.2
#r "nuget: Scribbly.Broker, 0.1.2"
#:package Scribbly.Broker@0.1.2
#addin nuget:?package=Scribbly.Broker&version=0.1.2
#tool nuget:?package=Scribbly.Broker&version=0.1.2
Scribbly Broker
A publisher used for commands and queries based on the Mediator Design Pattern.
%% sequence displaying pipeline
sequenceDiagram
Publish-->>Behavior: wraps handler with middleware
Behavior-->>Handler: process notification
Handler-->>Publisher: returns to caller
Table of Contents
Example
Below is a brief snip of code to get you started before reading more.
- Add a reference to the
Scribbly.Broker.MicrosoftHostingpackage
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScribblyBroker(options =>
{
options.AsScoped = true;
options.AddHandlersFromAssembly<Program>();
options
.AddBehavior<TracingBehavior>()
.AddBehavior<ExceptionBehavior>();
});
- Create some notifications
INotification
public record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) : INotification
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
- Create some queries
INotification<TResult>(these accept data and return a result)
public record WeatherQuery(string Summary) : INotification<WeatherForecast>;
- Create handlers
INotificationHandlerfor the notifications
public sealed class WeatherForecastHandler(ILogger<WeatherForecastHandler> logger) : INotificationHandler<WeatherForecast>
{
/// <inheritdoc />
public Task Handle(WeatherForecast notification, CancellationToken cancellationToken = default)
{
logger.LogInformation("Handled Weather: {Weather}", notification);
return Task.CompletedTask;
}
}
- Create query handlers
INotificationHandlerfor the messages that return results
public sealed class RandomQueryHandler: INotificationHandler<WeatherQuery, WeatherForecast>
{
private static Random Random = new Random();
/// <inheritdoc />
public Task<WeatherForecast> Handle(WeatherQuery notification, CancellationToken cancellationToken = default)
{
return Task.FromResult(new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(Random.Next(1, 20))),
Random.Next(12, 55),
notification.Summary
));
}
}
- Publish and query
app.MapGet("/weather", async (IBrokerStream streamer, IBrokerPublisher publisher) =>
{
var forecasts = new List<WeatherForecast>();
foreach (var summary in summaries)
{
await foreach (var forecast in streamer.QueryStream<WeatherQuery, WeatherForecast>(new WeatherQuery(summary)))
{
forecasts.Add(forecast);
await publisher.Publish(forecast);
}
}
return forecasts;
});
🎁 Packages
Simply public interfaces and delegates used to interface with the framework.
The core framework executing and routing notificaitons to handlers.
A wraper leveraging the Microsoft DI container to resolve services and handlers.
An extension to allow asynconouse tracing and message tracking through the Broker framework
💪 Notifcations
🛒 Handlers
🛁 Behaviors
🛁 Pipelines
🎉 Hosting
| 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 is compatible. 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 is compatible. 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 is compatible. 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
- Scribbly.Broker.Contract (>= 0.1.2)
-
net10.0
- Scribbly.Broker.Contract (>= 0.1.2)
-
net8.0
- Scribbly.Broker.Contract (>= 0.1.2)
-
net9.0
- Scribbly.Broker.Contract (>= 0.1.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Scribbly.Broker:
| Package | Downloads |
|---|---|
|
Scribbly.Broker.MicrosoftHosting
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.