Actions are used to group specifications - for instance all the specifications that apply when a new user is added to the system. Actions can be abstract (in which case they cannot be called directly) or concrete and they can inherit from other actions. This means that specifications common to a number of actions can be grouped in an abstract action which can then be inherited by the concrete actions. Concrete actions can also be shortciruited, which means that they will stop as soon as a specification contained within the action is not met.

To validate an object, use the Initialiser to create an IValidatorFactory. Note that you should hold a reference to the ValidatorFactory for the lifetime of your application because it compiles all the specifications once when they are first required. Use the IValidatorFactory to create an IValidator. Call the Validate method on the IValidator passing the object to be validated and the name of the action for which to perform validation.