private string GetMemberConfigValue(ConfigurationMemberAttribute attrib, object value) { string valueString; if (value == null) { valueString = string.Empty; } else if (value is DateTime) { valueString = ((DateTime)value).ToString("s"); } else { valueString = value.ToString(); } if (!attrib.Encrypted) { return(valueString); } if (string.IsNullOrEmpty(attrib.KeyFile)) { return(Encryption.EncryptConfigurationValue(valueString)); } try { return(Encryption.EncryptConfigurationValue(valueString, attrib.KeyFile)); } catch (Exception ex) { ErrorHandling.LogException(ex); return(Encryption.EncryptConfigurationValue(valueString)); } }
public string GeConfigurationValue(string name) { foreach (MemberInfo member in GetType().GetMember(name, MemberTypes.Property | MemberTypes.Field, BindingFlags.Public | BindingFlags.Instance)) { object value; switch (member.MemberType) { case MemberTypes.Field: value = ((FieldInfo)member).GetValue(this); break; case MemberTypes.Property: PropertyInfo property = (PropertyInfo)member; if (!property.CanRead) { continue; } value = property.GetValue(this, null); break; default: continue; // not a property or field } ConfigurationMemberAttribute attrib = member.GetCustomAttributes(true).OfType <ConfigurationMemberAttribute> ().FirstOrDefault(); if (attrib != null) { return(GetMemberConfigValue(attrib, value)); } } return(null); }
protected void SetSettings(object configHolder, bool saveToDb) { if (!exeConfig) { return; } bool saveConfigToDb = BusinessDomain.DataAccessProvider != null && saveToDb; foreach (MemberInfo member in configHolder.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance)) { ConfigurationMemberAttribute attrib = member.GetCustomAttributes(true).OfType <ConfigurationMemberAttribute> ().FirstOrDefault(); if (attrib == null) { continue; } object value; switch (member.MemberType) { case MemberTypes.Field: value = ((FieldInfo)member).GetValue(configHolder); break; case MemberTypes.Property: PropertyInfo property = (PropertyInfo)member; if (!property.CanRead) { continue; } value = property.GetValue(configHolder, null); break; default: continue; // not a property or field } string valueString = GetMemberConfigValue(attrib, value); SaveMember(member, valueString, saveConfigToDb, attrib.DbKey); } }
protected void Load(object configHolder, bool loadLocal) { bool saveNeeded = false; bool loadConfigFromDb = BusinessDomain.DataAccessProvider != null; foreach (MemberInfo member in configHolder.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance)) { // Get the data type and skip everything that is not a field or property Type memberType; switch (member.MemberType) { case MemberTypes.Field: memberType = ((FieldInfo)member).FieldType; break; case MemberTypes.Property: PropertyInfo property = (PropertyInfo)member; if (!property.CanWrite) { continue; } memberType = property.PropertyType; break; default: continue; // Skip methods, events etc. } // Check if this is a configuration property and get the extended attributes ConfigurationMemberAttribute attrib = null; foreach (object customAttrib in member.GetCustomAttributes(true)) { attrib = customAttrib as ConfigurationMemberAttribute; if (attrib != null) { break; } } // If the field is not marked with the appropriate attribute or // only user-specific settings are required and it is not user-specific, skip it if (attrib == null) { continue; } // The default value cannot be null if (attrib.DefaultValue == null) { continue; } if (string.IsNullOrEmpty(attrib.DbKey) != loadLocal) { continue; } string value = null; ConfigurationMemberAttribute saveToDbAttrib = null; if (string.IsNullOrEmpty(attrib.DbKey)) { if (!TryGetSetting(member.Name, out value)) { saveNeeded = true; } } else if (loadConfigFromDb) { if (attrib.MigrateToDb && TryGetSetting(member.Name, out value)) { DeleteSetting(member.Name); saveNeeded = true; } ConfigEntry ent = ConfigEntry.GetByName(attrib.DbKey); if (ent == null) { saveToDbAttrib = attrib; } else { value = ent.Value; } } if (value == null) { if (!customDefaults.TryGetValue(member.Name, out value)) { value = attrib.DefaultValue; } attrib = null; } try { // Set the property with the data from the configuration file SetMember(configHolder, member, memberType, value, attrib); } catch { // If the data is corrupted set the default value SetMember(configHolder, member, memberType, value, null); } if (saveToDbAttrib != null) { string valueString = GetMemberConfigValue(saveToDbAttrib, value); SaveMember(member, valueString, true, saveToDbAttrib.DbKey); } } if (!saveNeeded) { return; } SetSettings(configHolder, false); SaveSettings(); }
protected static void SetMember(object configHolder, MemberInfo member, Type type, string value, ConfigurationMemberAttribute attrib) { if (value == null) { throw new ArgumentNullException("value"); } if (attrib != null && attrib.Encrypted) { if (!string.IsNullOrEmpty(value)) { string keyFile = PlatformHelper.IsWindows ? attrib.KeyFile : (string.IsNullOrWhiteSpace(attrib.UnixKeyFile) ? attrib.KeyFile : attrib.UnixKeyFile); if (string.IsNullOrEmpty(keyFile)) { value = Encryption.DecryptConfigurationValue(value); } else { try { value = Encryption.DecryptConfigurationValue(value, keyFile); } catch (Exception ex) { ErrorHandling.LogException(ex); value = Encryption.DecryptConfigurationValue(value); } } } } string memberTypeName = type.Name.ToLowerInvariant(); switch (memberTypeName) { case "string": SetMemberValue(configHolder, member, value); break; case "boolean": SetMemberValue(configHolder, member, Convert.ToBoolean(value)); break; case "datetime": DateTime dateTime; try { dateTime = Convert.ToDateTime(value); } catch (FormatException) { dateTime = DateTime.MinValue; } SetMemberValue(configHolder, member, dateTime); break; case "decimal": SetMemberValue(configHolder, member, Convert.ToDecimal(value)); break; case "single": SetMemberValue(configHolder, member, Convert.ToSingle(value)); break; case "double": SetMemberValue(configHolder, member, Convert.ToDouble(value)); break; default: if (memberTypeName.StartsWith("int32")) { SetMemberValue(configHolder, member, Convert.ToInt32(value)); } else if (memberTypeName.StartsWith("int")) { SetMemberValue(configHolder, member, Convert.ToInt64(value)); } else if (type.IsEnum) { SetMemberValue(configHolder, member, Enum.Parse(type, value)); } break; } }