Command Query Separation abstractions for .NET and C#
public interface ICommand;
public interface ICommand<TResult>;
public interface ICommandHandler<in TCommand>
where TCommand : ICommand
{
Task HandleAsync(TCommand command, CancellationToken cancellationToken);
}
public interface ICommandHandler<in TCommand, TResult>
where TCommand : ICommand<TResult>
{
Task<TResult> HandleAsync(TCommand command, CancellationToken cancellationToken);
}
public interface IQuery<TResult>;
public interface IQueryHandler<in TQuery, TResult>
where TQuery : IQuery<TResult>
{
Task<TResult> HandleAsync(TQuery query, CancellationToken cancellationToken);
}
public interface IError
{
public string? Message { get; }
public Dictionary<string, object>? Details { get; }
}