just c0c2c9f057
All checks were successful
.NET Publish / publish (push) Successful in 1m0s
change publish script
2025-11-11 23:38:15 +04:00
2025-02-01 20:34:34 +04:00
2025-11-11 23:38:15 +04:00
2025-11-11 23:23:14 +04:00
2025-11-11 23:23:14 +04:00
2025-11-11 23:23:14 +04:00
2025-02-01 20:34:07 +04:00
2025-02-01 20:34:07 +04:00
2025-02-02 11:51:34 +04:00
2025-02-01 20:34:34 +04:00
2025-02-01 20:34:07 +04:00
2025-02-02 11:51:55 +04:00

Just.Cqrs

Inspired by MediatR

Just.Cqrs is a lightweight, easy-to-use C# library designed to simplify the implementation of the Command Query Responsibility Segregation (CQRS) pattern in .NET applications. With a focus on simplicity and flexibility, Just.Cqrs provides a clean and intuitive way to separate command and query logic.

Features

  • Separate dispatching of Commands/Queries
  • 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

# install the package using NuGet
dotnet add package Just.Cqrs

Register in DI with IServiceCollection

services.AddCqrs(opt => opt
    .AddQueryHandler<SomeQueryHandler>()
    .AddCommandHandler<SomeCommandHandler>()
    .AddBehavior<SomeQueryBehavior>()
    .AddOpenBehavior(typeof(LoggingBehavior<,>))
);

Example Usage

Define a Query and Handler

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

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.

Description
Lightweight, easy-to-use C# library designed to simplify the implementation of the Command Query Responsibility Segregation (CQRS) pattern
Readme MIT 80 KiB
v1.1.2 Latest
2025-11-11 23:39:41 +04:00
Languages
C# 100%