feat: add inital in memory dispatcher
Some checks failed
default / dotnet-default-workflow (push) Failing after 1m24s
Some checks failed
default / dotnet-default-workflow (push) Failing after 1m24s
Add a simple in memory dispatcher for scalar requests and stream request.
This commit is contained in:
commit
ce50fcd1a3
145 changed files with 6384 additions and 0 deletions
72
README.md
Normal file
72
README.md
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
# `Geekeey.Request`
|
||||
|
||||
Simple mediator implementation in .NET with minimal dependencies.
|
||||
|
||||
## Features
|
||||
|
||||
- **Simple interfaces:** no complex constraints, just marker interfaces that work.
|
||||
- **Minmal dependencies:** only depends on `Microsoft.Extensions.DependencyInjection.Abstractions` and the
|
||||
`Microsoft.Extensions.Options` package.
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Install the NuGet package:
|
||||
|
||||
```shell
|
||||
dotnet add package Geekeey.Request
|
||||
```
|
||||
|
||||
You may need to add our NuGet feed to your `nuget.config` this can be done by running the following command:
|
||||
|
||||
```shell
|
||||
dotnet nuget add source -n geekeey https://code.geekeey.de/api/packages/geekeey/nuget/index.json
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
```csharp
|
||||
public static Task<int> Main()
|
||||
{
|
||||
var collection = new ServiceCollection();
|
||||
collection.AddRequestDispatcher(builder => builder
|
||||
.Add(typeof(ScalarHandler))
|
||||
.Add(typeof(ScalarBehavior)));
|
||||
await using var provider = collection.BuildServiceProvider();
|
||||
var dispatcher = provider.GetRequiredService<IRequestDispatcher>();
|
||||
|
||||
var request = new ScalarRequest { Value = "Hello" };
|
||||
var result = await dispatcher.DispatchAsync(request);
|
||||
|
||||
Console.WriteLine(result);
|
||||
return 0;
|
||||
}
|
||||
|
||||
public class ScalarRequest : IScalarRequest<string>
|
||||
{
|
||||
public string Value { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public class ScalarHandler : IScalarRequestHandler<ScalarTestRequest, string>
|
||||
{
|
||||
public Task<string> HandleAsync(ScalarTestRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
return Task.FromResult($"{request.Value} World");
|
||||
}
|
||||
}
|
||||
|
||||
public class ScalarBehavior : IScalarRequestBehavior<ScalarTestRequest, string>
|
||||
{
|
||||
public async Task<string> HandleAsync(ScalarTestRequest request, ScalarHandlerDelegate<string> next, CancellationToken cancellationToken)
|
||||
{
|
||||
Console.WriteLine("Before");
|
||||
var result = await next(request, cancellationToken);
|
||||
Console.WriteLine("After");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Behaviour of the Handlers
|
||||
|
||||
Handlers are resolved from either the DI conatiner or are created on the fly but can receive arguments from the DI
|
||||
container when being constructed. The same also applied for the request pipeline behaviours.
|
||||
Loading…
Add table
Add a link
Reference in a new issue