private MappingValidationResult Validate(IPropertyInformation propertyInfo)
        {
            ArgumentUtility.CheckNotNull("propertyInfo", propertyInfo);

            if (!propertyInfo.IsOriginalDeclaration())
            {
                var mappingAttributes = propertyInfo.GetCustomAttributes <IMappingAttribute> (false);
                if (mappingAttributes.Any())
                {
                    return(MappingValidationResult.CreateInvalidResultForProperty(
                               propertyInfo,
                               "The '{0}' is a mapping attribute and may only be applied at the property's base definition.",
                               mappingAttributes[0].GetType().Name));
                }
            }
            return(MappingValidationResult.CreateValidResult());
        }
        protected virtual bool FindPropertiesFilter(IPropertyInformation propertyInfo)
        {
            ArgumentUtility.CheckNotNull("propertyInfo", propertyInfo);
            if (!propertyInfo.IsOriginalDeclaration())
            {
                return(false);
            }

            if (IsUnmanagedProperty(propertyInfo))
            {
                return(false);
            }

            if (IsUnmanagedExplictInterfaceImplementation(propertyInfo))
            {
                return(false);
            }

            return(true);
        }