public override AbstractConfigValue GetValue(string config, ISettingSerializer serializer) { lock (_lk) { AbstractConfigValue value = null; Dictionary <string, object> tmp = serializer.Deserialize(config); if (_store.ContainsKey((string)tmp["name"])) { value = GetValue((string)tmp["name"]); } else { value = base.GetValue(config, serializer); _store.Add((string)tmp["name"], value); } return(value); } }
public virtual AbstractConfigValue GetValue(string config, ISettingSerializer serializer) { AbstractConfigValue value = null; Dictionary <string, object> tmp = serializer.Deserialize(config); if (tmp.ContainsKey("ref")) { return(GetValue((string)tmp["ref"])); } for (int i = 0; i < tmp.Keys.Count; i++) { string prop = tmp.Keys.ElementAt(i); if (serializer.IsValid((string)tmp[prop])) { tmp[prop] = GetValue((string)tmp[prop], serializer); } } Type type = Type.GetType((string)tmp["type"]); List <object> args = new List <object>(); foreach (ParameterInfo item in type.GetConstructors().First().GetParameters()) { if (tmp.ContainsKey(item.Name)) { args.Add(tmp[item.Name]); } else { args.Add(null); } } value = (AbstractConfigValue)Activator.CreateInstance(type, args.ToArray()); return(value); }