Пример #1
0
        public static void ResetObject(object target)
        {
            if (target == null)
            {
                return;
            }

            //MemberInfo[] memberInfos = ChoType.GetMembers(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(target.GetType());
            if (memberInfos != null && memberInfos.Length > 0)
            {
                foreach (MemberInfo memberInfo in memberInfos)
                {
                    if (memberInfo.GetCustomAttribute <ChoPropertyInfoAttribute>() == null)
                    {
                        continue;
                    }

                    try
                    {
                        ChoType.SetMemberValue(target, memberInfo, memberInfo.GetConvertedDefaultValue());
                    }
                    catch
                    {
                    }
                }
            }
        }
Пример #2
0
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            MemberInfo memberInfo = ChoTypeMembersCache.GetMemberInfo(WrappedObject.GetType(), binder.Name);

            if (memberInfo == null)
            {
                return(false);
            }

            // Locate property by name
            var propertyInfo = memberInfo as PropertyInfo; // WrappedObject.GetType().GetProperty(binder.Name, BindingFlags.Instance | BindingFlags.Public | (binder.IgnoreCase ? BindingFlags.IgnoreCase : 0));

            if (propertyInfo != null && !propertyInfo.CanWrite)
            {
                return(false);
            }

            RaisePropertyChanging(binder.Name);

            ChoType.SetMemberValue(WrappedObject, memberInfo, value);

            //object newValue = value;
            //// Check the types are compatible
            //Type propertyType = propertyInfo.PropertyType;
            //if (!propertyType.IsAssignableFrom(value.GetType()))
            //{
            //    newValue = Convert.ChangeType(value, propertyType);
            //}

            //propertyInfo.SetValue(WrappedObject, newValue, null);
            RaisePropertyChanged(binder.Name);
            return(true);
        }
Пример #3
0
        internal static NameValueCollection ToPersistableNameValueCollection(object target)
        {
            ChoGuard.ArgumentNotNull(target, "Target");

            NameValueCollection nameValues = new NameValueCollection();

            //Dictionary<string, MemberInfo> configMemberInfos = ChoType.GetMembersDictionary(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            //MemberInfo[] memberInfos = ChoType.GetMembers(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(target.GetType());
            if (memberInfos == null || memberInfos.Length == 0)
            {
                return(nameValues);
            }

            ChoPropertyInfoAttribute memberInfoAttribute = null;
            string name = null;

            foreach (MemberInfo memberInfo in memberInfos)
            {
                if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null)
                {
                    continue;
                }

                object memberValue = ChoType.GetMemberValue(target, memberInfo.Name);
                memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute));
                //if (memberInfoAttribute == null) continue;

                name = ChoType.GetMemberName(memberInfo, memberInfoAttribute);

                if (target is ChoConfigurableObject && ((ChoConfigurableObject)target).RaiseBeforeConfigurationObjectMemberPersist(memberInfo.Name, name, ref memberValue))
                {
                    nameValues.Add(name, memberValue == null ? null : memberValue.ToString());
                }
                else
                {
                    if (memberInfoAttribute != null && !memberInfoAttribute.Persistable)
                    {
                        continue;
                    }

                    memberValue = ChoType.GetMemberValue(target, memberInfo.Name);

                    nameValues.Add(name, ChoString.ToString(ChoConvert.ConvertTo(target, memberValue, typeof(string),
                                                                                 ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo), null),
                                                            String.Empty, String.Empty));
                }
            }
            return(nameValues);
        }
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = null;
            MemberInfo memberInfo = ChoTypeMembersCache.GetMemberInfo(_type, binder.Name);

            if (memberInfo != null)
            {
                result = ChoType.GetMemberValue(_instance, memberInfo);
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            MemberInfo memberInfo = ChoTypeMembersCache.GetMemberInfo(_type, binder.Name);

            if (memberInfo == null)
            {
                return(false);
            }

            try
            {
                //object newConvertedValue = ChoConvert.ConvertFrom(_instance, value, ChoType.GetMemberType(memberInfo),
                //    ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo));
                object newConvertedValue = ChoConvert.ConvertFrom(value, memberInfo, _instance);
                ChoType.SetMemberValue(_instance, memberInfo, newConvertedValue);
            }
            catch (ChoFatalApplicationException)
            {
                throw;
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.ToString());
                return(false);
            }

            if (!(_instance is INotifyPropertyChanged))
            {
                PropertyChangedEventHandler propertyChanged = PropertyChanged;
                if (propertyChanged != null)
                {
                    propertyChanged(this, new PropertyChangedEventArgs(binder.Name));
                }
            }
            return(true);
        }
Пример #6
0
        private void Register(Type type)
        {
            if (type == null)
            {
                return;
            }
            if (_cache.ContainsKey(type))
            {
                return;
            }

            lock (_padLock)
            {
                if (_cache.ContainsKey(type))
                {
                    return;
                }

                Dictionary <string, HashSet <string> > dependsOnCache = new Dictionary <string, HashSet <string> >(StringComparer.InvariantCultureIgnoreCase);
                _cache.Add(type, dependsOnCache);

                string       memberName  = null;
                MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(type);
                if (memberInfos != null && memberInfos.Length > 0)
                {
                    ChoPropertyDependsOnAttribute memberInfoAttribute = null;
                    foreach (MemberInfo memberInfo in memberInfos)
                    {
                        memberName          = memberInfo.Name;
                        memberInfoAttribute = (ChoPropertyDependsOnAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyDependsOnAttribute));
                        if (memberInfoAttribute == null)
                        {
                            continue;
                        }

                        string[] dependsOn = memberInfoAttribute.DependsOn;
                        if (dependsOn.IsNullOrEmpty())
                        {
                            continue;
                        }

                        foreach (string item in dependsOn)
                        {
                            if (item.IsNullOrWhiteSpace())
                            {
                                continue;
                            }

                            if (!dependsOnCache.ContainsKey(item))
                            {
                                dependsOnCache.Add(item, new HashSet <string>(StringComparer.InvariantCultureIgnoreCase));
                            }

                            if (dependsOnCache[item].Contains(memberName))
                            {
                                continue;
                            }

                            dependsOnCache[item].Add(memberName);
                        }
                    }
                }
            }
        }
Пример #7
0
        internal static Dictionary <string, object> ToPersistableDictionaryCollection(ChoBaseConfigurationElement configElement, Type itemType)
        {
            ChoGuard.ArgumentNotNull(configElement, "ConfigElement");

            object target = configElement.ConfigObject;

            ChoGuard.ArgumentNotNull(target, "Target");

            Dictionary <string, object> dict = new Dictionary <string, object>();

            //Dictionary<string, MemberInfo> configMemberInfos = ChoType.GetMembersDictionary(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            //MemberInfo[] memberInfos = ChoType.GetMembers(target.GetType(), typeof(ChoConfigurationPropertyAttribute));
            MemberInfo[] memberInfos = ChoTypeMembersCache.GetAllMemberInfos(target.GetType());
            if (memberInfos == null || memberInfos.Length == 0)
            {
                return(dict);
            }

            ChoPropertyInfoAttribute memberInfoAttribute = null;
            string name = null;

            foreach (MemberInfo memberInfo in memberInfos)
            {
                if (memberInfo.GetCustomAttribute <ChoIgnorePropertyAttribute>() != null)
                {
                    continue;
                }

                object memberValue = ChoType.GetMemberValue(target, memberInfo.Name);
                memberInfoAttribute = (ChoPropertyInfoAttribute)ChoType.GetMemberAttribute(memberInfo, typeof(ChoPropertyInfoAttribute));
                name = ChoType.GetMemberName(memberInfo, memberInfoAttribute);

                if (target is ChoConfigurableObject && ((ChoConfigurableObject)target).RaiseBeforeConfigurationObjectMemberPersist(memberInfo.Name, name, ref memberValue))
                {
                    dict.Add(name, memberValue);
                }
                else
                {
                    if (memberInfoAttribute != null && !memberInfoAttribute.Persistable)
                    {
                        continue;
                    }

                    memberValue = ChoType.GetMemberValue(target, memberInfo.Name);
                    Type memberType = ChoConfigurationMetaDataManager.GetSourceType(configElement, name, memberInfoAttribute);

                    if (memberType == null)
                    {
                        if (itemType == typeof(Object))
                        {
                            memberType = ChoType.GetMemberType(memberInfo);
                        }
                        else
                        {
                            memberType = itemType;
                        }
                    }
                    dict.Add(name, ChoConvert.ConvertTo(target, memberValue, memberType,
                                                        ChoTypeDescriptor.GetTypeConverters(memberInfo), ChoTypeDescriptor.GetTypeConverterParams(memberInfo), null));
                }
            }
            return(dict);
        }