No description
- C# 100%
This also removes the description from the package readme. The desciption of the package is shown on nuget.org in the list view and if no package readme is defined on the detail view of a package version. Since we provide a package readme we do not need the description shown twice. |
||
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| .editorconfig | ||
| .gitignore | ||
| CHANGELOG.md | ||
| Directory.Build.props | ||
| Directory.Build.targets | ||
| Directory.Packages.props | ||
| global.json | ||
| LICENSE.md | ||
| nuget.config | ||
| README.md | ||
| request.slnx | ||
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.Abstractionsand theMicrosoft.Extensions.Optionspackage.
Getting Started
Install the NuGet package:
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:
dotnet nuget add source -n geekeey https://code.geekeey.de/api/packages/geekeey/nuget/index.json
Usage
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.