Пример #1
0
        protected override object GetPropertyValue(ReflectObjectProperties wrapper, object reflectedObject)
        {
            var value = reflectedMember.GetValue(reflectedObject);

            if (value != null)
            {
                value = CoerceValue(value);
            }
            return(value);
        }
        public void Set(ReflectObjectProperties wrapper, object reflectedObject)
        {
            var memberExists = MemberExists();

            if (memberExists)
            {
                var value = GetPropertyValue(wrapper, reflectedObject);
                if (value != null)
                {
                    OwnPropertySetter(wrapper, value);
                }
            }
        }
Пример #3
0
 protected override object GetPropertyValue(ReflectObjectProperties wrapper, object reflectedObject)
 {
     return(MethodWrapper.CreateDelegateWrapper(reflectedMember, reflectedObject, ownProperty.PropertyType, isAction));
 }
 protected abstract object GetPropertyValue(ReflectObjectProperties wrapper, object reflectedObject);
Пример #5
0
        private object CoerceValue(object value)
        {
            if (coerceValue == null)
            {
                if (ReflectObjectProperties.IsReflectObjectPropertiesType(ownPropertyType))
                {
                    coerceValue = v => Wrap(ownPropertyType, v);
                }
                else
                {
                    /*
                     *      implement another time - List<> and IEnumerable<> will be sufficient
                     *      if (ownPropertyType.IsArray)
                     *      {
                     *              var elementType = ownPropertyType.GetElementType();
                     *              ...
                     *
                     *      }
                     */

                    // will know path taken so should be able to store - again as a static
                    if (ownPropertyType.IsGenericType)
                    {
                        var genericArguments = ownPropertyType.GetGenericArguments();
                        var genericArgument  = genericArguments[0];
                        if (genericArguments.Length == 1 && ReflectObjectProperties.IsReflectObjectPropertiesType(genericArgument))
                        {
                            var genericTypeDefinitionType = ownPropertyType.GetGenericTypeDefinition();

                            if (genericTypeDefinitionType == listType)
                            {
                                var constructedListType = listType.MakeGenericType(genericArgument);
                                var addMethod           = constructedListType.GetMethod("Add");

                                coerceValue = v =>
                                {
                                    var list       = Activator.CreateInstance(constructedListType);
                                    var enumerator = (v as IEnumerable).GetEnumerator();
                                    while (enumerator.MoveNext())
                                    {
                                        addMethod.Invoke(list, new object[] { enumerator.Current == null ? null : Wrap(genericArgument, enumerator.Current) });
                                    }
                                    return(list);
                                };
                            }
                            else if (genericTypeDefinitionType == enumerableTTYpe)
                            {
                                var createEnumerableMethodInfo = GetCreateEnumerableMethodInfo(genericArgument);
                                coerceValue = v => createEnumerableMethodInfo.Invoke(this, new object[] { v });
                            }
                        }
                    }
                }
                if (coerceValue == null)
                {
                    coerceValue = v => v;
                }
            }

            return(coerceValue(value));
        }