Inherits: ICommand
Description
The InterceptedCommand allows you to implement a command wrapped by an interceptor. Thus, it allows you to build command call chains, where the interceptor can alter execution and delegate calls to a next command, which can then be intercepted or not.
Constructors
Creates a new InterceptedCommand, which serves as a link in an execution chain. Contains information about the interceptor that is being used and the next command in the chain.
public
InterceptedCommand(ICommandInterceptor interceptor, ICommand next)
- interceptor: ICommandInterceptor - interceptor that is intercepting the command.
- next: ICommand - (link to) next command in the command’s execution chain.
Properties
Name
Gets the command name.
public
string Name { get; }
Schema
Gets the command schema.
public Schema Schema { get; }
Instance methods
ExecuteAsync
Executes the next command in the execution chain using the given parameters (arguments).
See Parameters.
public
Task<object> ExecuteAsync(string correlationId, Parameters args)
- correlationId: string - unique transaction id used to trace calls across components.
- args: Parameters - parameters (arguments) to pass to the command for execution.
- returns: Task<object> - execution result.
Validate
Validates the parameters (arguments) that are to be passed to the command that is next
in the execution chain.
See Parameters, ValidationResult.
public
IList<ValidationResult> Validate(Parameters args)
- args: Parameters - parameters (arguments) used to validate for the next command.
- returns: IList<ValidationResult> - array of ValidationResults.
Examples
public class CommandLogger: ICommandInterceptor
{
public String GetName(ICommand command)
{
return command.GetName();
}
public Task<object> ExecuteAsync(string correlationId, ICommand command, Parameters args)
{
Console.WriteLine("Executed command " + command.getName());
return command.ExecuteAsync(correlationId, args);
}
private IList<ValidationResult> validate(ICommand command, Parameters args)
{
return command.validate(args);
}
}
var logger = new CommandLogger();
var loggedCommand = new InterceptedCommand(logger, command);
// Each called command will output: Executed command <command name>