public override object GetValue(object component)
        {
            CheckComponentType(component);
            if (this.ComponentType == component.GetType())
            {
                return(PropInfo.IsNull() ? null : PropInfo.GetValue(component, null));
            }

            PropertyInfo[] propInfos = component.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
            //This code is copied from http://www.sql.ru/forum/actualthread.aspx?tid=579972
            // and i have no idea what the following code is trying to achieve.
            //It looks like it might be trying to deal with the prop info being
            // on a customer e.g. when a PropInfo for CustomerName on Customer when the component is Order.
            foreach (PropertyInfo mypropinfo in propInfos)
            {
                object obj = mypropinfo.GetValue(component, null);

                PropertyInfo[] nestedpropsInfo = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

                foreach (PropertyInfo mynestedpropinfo in nestedpropsInfo)
                {
                    if (PropInfo.Name == mynestedpropinfo.Name)
                    {
                        return(mynestedpropinfo.GetValue(obj, null));
                    }
                }
            }
            return(null);
        }
 public override void SetValue(object component, object value)
 {
     if (PropInfo.IsNull())
     {
         return;
     }
     CheckComponentType(component);
     if (PropInfo.DeclaringType == component.GetType())
     {
         PropInfo.SetValue(component, value, null);
     }
     else
     {
         PropertyInfo[] propsInfo = component.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
         foreach (PropertyInfo mypropinfo in propsInfo)
         {
             object         obj             = mypropinfo.GetValue(component, null);
             PropertyInfo[] nestedpropsInfo = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
             foreach (PropertyInfo mynestedpropinfo in nestedpropsInfo)
             {
                 if (PropInfo.Name == mynestedpropinfo.Name)
                 {
                     mynestedpropinfo.SetValue(obj, value, null);
                 }
             }
         }
     }
 }