readme and publish workflow
This commit is contained in:
38
.gitea/workflows/publish-nuget.yaml
Normal file
38
.gitea/workflows/publish-nuget.yaml
Normal file
@@ -0,0 +1,38 @@
|
||||
name: .NET Publish
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+'
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup .NET
|
||||
uses: https://github.com/actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 9.x
|
||||
|
||||
- name: Restore dependencies
|
||||
run: dotnet restore --nologo
|
||||
|
||||
- name: Test
|
||||
run: dotnet test --nologo --no-restore --configuration Release
|
||||
|
||||
- name: Create the package
|
||||
env:
|
||||
RELEASE_VERSION: ${{ gitea.ref_name }}
|
||||
run: >
|
||||
dotnet pack --no-restore --configuration Release --output nupkgs
|
||||
`echo $RELEASE_VERSION | sed -E 's|^(v([0-9]+(\.[0-9]+){2}))(-([a-z0-9]+)){1}|/p:ReleaseVersion=\2 /p:VersionSuffix=\5|; s|^(v([0-9]+(\.[0-9]+){2}))$|/p:ReleaseVersion=\2|'`
|
||||
|
||||
- name: Publish the package to Gitea
|
||||
run: dotnet nuget push --source ${{ vars.OUTPUT_NUGET_REGISTRY }} --api-key ${{ secrets.LOCAL_NUGET_PACKAGE_TOKEN }} nupkgs/*.nupkg
|
||||
|
||||
- name: Publish the package to NuGet.org
|
||||
run: dotnet nuget push --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_PACKAGE_TOKEN }} nupkgs/*.nupkg
|
||||
76
readme.md
76
readme.md
@@ -7,24 +7,90 @@ Inspired by [MediatR](https://github.com/jbogard/MediatR)
|
||||
## Features
|
||||
|
||||
* Separate dispatching of Commands/Queries
|
||||
* Middleware-like behaviours
|
||||
* Middleware-like Behaviors
|
||||
|
||||
## Compatibility
|
||||
|
||||
**Just.Cqrs** is built for .Net Standard 2.1 and .NET 8.0 and 9.0.
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Install from NuGet.org
|
||||
|
||||
```
|
||||
```bash
|
||||
# install the package using NuGet
|
||||
dotnet add package Just.Cqrs
|
||||
```
|
||||
|
||||
### Register in DI with ```IServiceCollection```
|
||||
|
||||
```cs
|
||||
```csharp
|
||||
services.AddCqrs(opt => opt
|
||||
.AddQueryHandler<SomeQueryHandler>()
|
||||
.AddCommandHandler<SomeCommandHandler>()
|
||||
.AddBehaviour<SomeBehaviour>()
|
||||
.AddOpenBehaviour(typeof(SomeOpenBehaviour<,>))
|
||||
.AddBehavior<SomeQueryBehavior>()
|
||||
.AddOpenBehavior(typeof(LoggingBehavior<,>))
|
||||
);
|
||||
```
|
||||
|
||||
## Example Usage
|
||||
|
||||
### Define a Query and Handler
|
||||
|
||||
```csharp
|
||||
record GetUserByIdQuery(int UserId) : IKnownQuery<User>;
|
||||
|
||||
class GetUserByIdQueryHandler : IQueryHandler<GetUserByIdQuery, User>
|
||||
{
|
||||
public ValueTask<User> Handle(GetUserByIdQuery query, CancellationToken cancellationToken)
|
||||
{
|
||||
// Fetch user logic here
|
||||
}
|
||||
}
|
||||
|
||||
// Use Dispatcher to execute the query
|
||||
class GetUserByIdUseCase(IQueryDispatcher dispatcher)
|
||||
{
|
||||
public async Task<IResult> Execute(int userId, CancellationToken cancellationToken)
|
||||
{
|
||||
var user = await dispatcher.Dispatch(new GetUserByIdQuery(userId), cancellationToken);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
\* *the same principles apply to commands*
|
||||
|
||||
### Define a Behavior
|
||||
|
||||
```csharp
|
||||
class LoggingBehavior<TRequest, TResult>(ILogger logger) : IDispatchBehavior<TRequest, TResult>
|
||||
where TRequest: notnull
|
||||
{
|
||||
public async ValueTask<TResult> Handle(
|
||||
TRequest request,
|
||||
DispatchFurtherDelegate<TResult> next,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
logger.LogInformation("Handling request: {RequestType}", typeof(TRequest).Name);
|
||||
var result = await next();
|
||||
logger.LogInformation("Request handled: {RequestType}", typeof(TRequest).Name);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
class SomeQueryBehavior : IDispatchBehavior<SomeQuery, SomeQueryResult>
|
||||
{
|
||||
public async ValueTask<SomeQueryResult> Handle(
|
||||
SomeQuery request,
|
||||
DispatchFurtherDelegate<SomeQueryResult> next,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
// do something
|
||||
return await next();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
**Just.Cqrs** is licensed under the [MIT License](LICENSE).
|
||||
|
||||
Reference in New Issue
Block a user