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);
            }
        }
Beispiel #2
0
        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);
        }