public static void DoObjectLevelValidation(this object recObject, ChoRecordConfiguration configuration, IEnumerable <ChoRecordFieldConfiguration> fieldConfigurations)
        {
            if (recObject == null)
            {
                return;
            }

            if ((configuration.ObjectValidationMode & ChoObjectValidationMode.ObjectLevel) == ChoObjectValidationMode.ObjectLevel)
            {
                if (configuration.Validator == null)
                {
                    if (configuration.HasConfigValidators)
                    {
                        IDictionary <string, Object> dict = null;
                        if (recObject is IDictionary <string, object> )
                        {
                            dict = recObject as IDictionary <string, Object>;
                        }
                        else
                        {
                            dict = new Dictionary <string, object>();

                            foreach (var pd in configuration.PIDict.Values)
                            {
                                dict.Add(pd.Name, ChoType.GetPropertyValue(recObject, pd));
                            }
                        }

                        ChoValidator.Validate(dict, configuration.ValDict);
                    }
                    else
                    {
                        if (!configuration.IsDynamicObject)
                        {
                            ChoValidator.Validate(recObject);
                        }
                    }
                }
                else
                {
                    if (recObject != null && configuration.Validator(recObject))
                    {
                        throw new ValidationException("Failed to validate '{0}' object. {1}".FormatString(recObject.GetType().FullName, Environment.NewLine));
                    }
                }
            }
        }