private void CheckRules <TDefinition> (IEnumerable <IValidationRule <TDefinition> > rules, TDefinition definition) where TDefinition : IVisitableDefinition
 {
     _validationLog.ValidationStartsFor(definition);
     foreach (IValidationRule <TDefinition> rule in rules)
     {
         try
         {
             rule.Execute(this, definition, _validationLog);
         }
         catch (Exception ex)
         {
             _validationLog.UnexpectedException(rule, ex);
         }
     }
     _validationLog.ValidationEndsFor(definition);
 }