LairBus 1.0.2
See the version list below for details.
dotnet add package LairBus --version 1.0.2
NuGet\Install-Package LairBus -Version 1.0.2
<PackageReference Include="LairBus" Version="1.0.2" />
<PackageVersion Include="LairBus" Version="1.0.2" />
<PackageReference Include="LairBus" />
paket add LairBus --version 1.0.2
#r "nuget: LairBus, 1.0.2"
#:package LairBus@1.0.2
#addin nuget:?package=LairBus&version=1.0.2
#tool nuget:?package=LairBus&version=1.0.2
LairBus
LairBus is a simple system for interacting via commands and notifications using a shared communication bus.
At the moment, it can be considered stable, but further improvements and new features will be added in the future as needed.
Core concepts used in the project:
IBus,Bus(main communication bus);INotification,INotificationHandler(interfaces for passing data via notifications);IRequest,IRequestHandler(interfaces for sending and handling commands with optional result data).
Installation
Target framework: .NET 8 (works on higher versions as well)
Install via NuGet:
- dotnet add package LairBus
Install via Package Manager:
- Install-Package LairBus
Usage examples
Example 1
Registering LairBus in ServiceCollection
var serviceCollection = new ServiceCollection();
serviceCollection.AddBus(config =>
{
config.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());
});
Implementing a simple command
public class TestRequest : IRequest
{
public int Id { get; set; }
}
public class TestRequestHandler : IRequestHandler<TestRequest>
{
public async Task HandleRequest(TestRequest request, CancellationToken cancellationToken)
{
Console.WriteLine($"Executing test request: {request.Id}");
}
}
Executing a command and getting the result
var serviceCollection = new ServiceCollection();
serviceCollection.AddBus(config =>
{
config.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());
});
var serviceProvider = serviceCollection.BuildServiceProvider();
var bus = serviceProvider.GetRequiredService<IBus>();
await bus.SendRequest(new TestRequest
{
Id = 5
});
// Execution result:
// Executing test request: 5
Example 2
Registering LairBus in ServiceCollection
var serviceCollection = new ServiceCollection();
serviceCollection.AddBus(config =>
{
config.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());
});
Implementing a command with response object TestModel
public class TestModel
{
public long Id { get; set; }
public string Text { get; set; }
}
public class TestResponseRequest : IRequest<TestModel>
{
public long Id { get; set; }
public string Input { get; set; }
}
public class TestResponseRequestHandler : IRequestHandler<TestResponseRequest, TestModel>
{
public Task<TestModel> HandleRequest(TestResponseRequest request, CancellationToken cancellationToken)
{
var testModel = new TestModel
{
Id = request.Id,
Text = request.Input
};
return Task.FromResult(testModel);
}
}
Executing a command and getting the result
var serviceCollection = new ServiceCollection();
serviceCollection.AddBus(config =>
{
config.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());
});
var serviceProvider = serviceCollection.BuildServiceProvider();
var model = await bus.SendRequest<TestModel>(new TestResponseRequest
{
Id = 5,
Input = "TEST INPUT"
});
Console.WriteLine($"Id: {model.Id}, text: {model.Text}");
// Execution result:
// Id: 5, text: TEST INPUT
Compatibility
- .NET 8+
License
The project is licensed under the Apache License. See the LICENSE file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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 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. |
-
net8.0
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Fixed:
- SendNotification no longer fails when a notification has no registered handlers.
- SendNotification now invokes all registered handlers for the notification type instead of only one.
Added:
- Added RegisterServicesFromAssemblyContaining<TAssembly>() to simplify handler registration from the assembly containing.