Filtering
services.AddTransient(typeof(IOperationFilter<,>), typeof(CommandValidationFilter<,>));
services.AddTransient(typeof(IOperationFilter<,>), typeof(QueryLoggingFilter<,>));public interface IOperationFilter<in TOperation, TResult> where TOperation : IOperation<TResult>
{
Task<TResult> FilterAsync(TOperation operation, CancellationToken cancellationToken, OperationHandlerDelegate<TResult> next);
}Filter conditional execution
public class CommandValidationFilter<TCommand, TResult> : IOperationFilter<TCommand, TResult> where TCommand : ICommand<TResult>
{
private readonly IValidationProvider _validationProvider;
public CommandValidationFilter(IValidationProvider validationProvider)
=> _validationProvider = validationProvider;
public async Task<TResult> FilterAsync(TCommand command, CancellationToken cancellationToken, OperationHandlerDelegate<TResult> next)
{
if (_validationProvider.IsValid(command, cancellationToken))
{
return await next();
}
else
{
throw new SomeException("Some error message.");
}
}
}Special filters
Last updated