Ejemplo n.º 1
0
        private void TryGetSet(RegistryKey key, object obj, string keyName, RegistryValueKind valueKind)
        {
            object value = null;

            try
            {
                value = key.GetValue(keyName);
            }
            catch
            {
            }

            if (value != null)
            {
                try
                {
                    var property = obj.GetType().GetProperty(keyName);

                    if (property.PropertyType.IsEnum)
                    {
                        var enumValue = Enum.Parse(property.PropertyType, value.ToString());
                        obj.SetPropertyValue(keyName, enumValue);
                    }
                    else
                    {
                        switch (property.PropertyType.Name)
                        {
                        case "DateTime":

                            switch (valueKind)
                            {
                            case RegistryValueKind.String:

                                var date = DateTime.Parse(value.ToString());
                                obj.SetPropertyValue(keyName, date);
                                break;

                            default:
                                DebugUtils.Break();
                                break;
                            }

                            break;

                        case "String":

                            switch (valueKind)
                            {
                            case RegistryValueKind.String:
                                obj.SetPropertyValue(keyName, value.ToString());
                                break;

                            default:
                                DebugUtils.Break();
                                break;
                            }

                            break;

                        case "Int32":
                        {
                            obj.SetPropertyValue(keyName, (int)value);
                            break;
                        }


                        case "Boolean":
                        {
                            obj.SetPropertyValue(keyName, (int)value == 0 ? true : false);
                            break;
                        }

                        default:
                            DebugUtils.Break();
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    DebugUtils.Break();
                }
            }
        }
Ejemplo n.º 2
0
        private void DoSave(RegistryKey key, object obj)
        {
            // public strings

            foreach (var property in obj.GetPublicPropertiesOfType <string>())
            {
                var propertyValue = (string)property.GetValue(obj);
                var saveNull      = true;

                if (property.HasCustomAttribute <RegistryPropertySaveAttribute>())
                {
                    var registryPropertySaveAttribute = property.GetCustomAttribute <RegistryPropertySaveAttribute>();

                    if (registryPropertySaveAttribute.SaveOptions == RegistryPropertySaveOptions.SaveNullValueAsEmpty)
                    {
                        saveNull = true;
                    }
                }

                if (!propertyValue.IsNullWhiteSpaceOrEmpty() || saveNull)
                {
                    if (obj is IRegistryKey)
                    {
                        if (property.Name != "KeyName")
                        {
                            key.SetValue(property.Name, propertyValue);
                        }
                    }
                    else
                    {
                        key.SetValue(property.Name, propertyValue == null ? string.Empty : propertyValue);
                    }
                }
            }

            // non strings

            foreach (var attributeProperty in obj.GetPublicPropertiesWithAttributeType <RegistryNonStringValueAttribute>())
            {
                var attribute = attributeProperty.Key;
                var property  = attributeProperty.Value;
                var value     = property.GetValue(obj, null);
                var valueKind = attribute.ValueKind;

                switch (valueKind)
                {
                case RegistryValueKind.String:

                    if (value != null)
                    {
                        key.SetValue(property.Name, value.ToString(), valueKind);
                    }

                    break;

                case RegistryValueKind.DWord:

                    if (value != null)
                    {
                        switch (property.PropertyType.Name)
                        {
                        case "Boolean":
                            key.SetValue(property.Name, (bool)value ? 1 : 0, valueKind);
                            break;

                        default:
                            key.SetValue(property.Name, (int)value, valueKind);
                            break;
                        }
                    }

                    break;

                default:
                    DebugUtils.Break();
                    break;
                }
            }

            // enumerables

            foreach (var attributeProperty in obj.GetPublicPropertiesWithAttributeType <RegistryKeyEnumerableAttribute>())
            {
                var attribute = attributeProperty.Key;
                var property  = attributeProperty.Value;
                var value     = property.GetValue(obj, null);
                var subKey    = key.CreateSubKey(attribute.KeyName);

                if (value is IRegistryKeyWithSubKeys)
                {
                    DebugUtils.Break();
                }
                else
                {
                    var enumerable = (IEnumerable)value;
                    var x          = 1;

                    foreach (var subValue in enumerable)
                    {
                        if (subValue is IRegistryKey)
                        {
                            var registryKeyObject = (IRegistryKey)subValue;

                            if (registryKeyObject is IRegistryKeyWithSubKeys)
                            {
                                DebugUtils.Break();
                            }
                            else
                            {
                                subKey = subKey.CreateSubKey(string.Format(registryKeyObject.KeyName, x));
                            }
                        }

                        if (attribute.SaveValueAsKey)
                        {
                            var valueString = subValue.ToString();

                            if (subKey.GetSubKeyNames().Any(n => n == valueString))
                            {
                                subKey.DeleteSubKey(valueString);
                            }

                            subKey.CreateSubKey(valueString);
                        }
                        else
                        {
                            DoSave(subKey, subValue);
                        }

                        x++;
                    }
                }
            }

            // public properties of type IRegistryKey

            foreach (var propertyValue in obj.GetPublicPropertyValuesOfType <IRegistryKey>())
            {
                var value = propertyValue.Value;

                if (value is IRegistryKey)
                {
                    var registryKeyObject = (IRegistryKey)value;

                    if (registryKeyObject is IRegistryKeyWithSubKeys)
                    {
                        DebugUtils.Break();
                    }
                    else
                    {
                        var subKey = key.CreateSubKey(registryKeyObject.KeyName);

                        DoSave(subKey, registryKeyObject);
                    }
                }
            }
        }
Ejemplo n.º 3
0
 public static bool HasDynamicMember(this object obj, string name)
 {
     return(DebugUtils.BreakReturn <bool>(false));
 }
Ejemplo n.º 4
0
 public static void SetDynamicMember(this object obj, string name, object value)
 {
     DebugUtils.Break();
 }
Ejemplo n.º 5
0
 public static T GetDynamicMemberValue <T>(this object obj, string name)
 {
     return((T)DebugUtils.BreakReturnNull());
 }