Exemple #1
0
 private object SetFieldsAndProps(Type t, object obj, ParameterInfo[]  pInfos)
 {
     MemberInfo[] fieldsAndProps = t.GetFields();
     fieldsAndProps = fieldsAndProps.Concat(t.GetProperties(BindingFlags.Instance | BindingFlags.Public)).ToArray();
     foreach (MemberInfo mi in fieldsAndProps)
     {
         if (pInfos.ToList().Find(pi => pi.Name == mi.Name) == null && IsDefaultValue(obj, mi))
         {
             FakerConfig.Rule rule = config?.Rules.Find(Rule => (Rule.MemberName == mi.Name));
             if (rule != null)
             {
                 if (mi is FieldInfo fi && fi.FieldType == rule.MemberType)
                 {
                     fi.SetValue(obj, (Activator.CreateInstance(rule.GeneratorType) as IGenerator).Generate(new GeneratorContext(rule.MemberType)));
                 }
                 else if ((mi as PropertyInfo).PropertyType == rule.MemberType && (mi as PropertyInfo).CanWrite)
                 {
                     (mi as PropertyInfo).SetValue(obj, (Activator.CreateInstance(rule.GeneratorType) as IGenerator).Generate(new GeneratorContext(rule.MemberType)));
                 }
             }
             else
             {
                 (mi as FieldInfo)?.SetValue(obj, Create(((FieldInfo)mi).FieldType));
                 if ((mi as PropertyInfo)?.CanWrite == true && (mi as PropertyInfo)?.SetMethod.IsPublic == true)
                 {
                     ((PropertyInfo)mi).SetValue(obj, Create(((PropertyInfo)mi).PropertyType));
                 }
             }
         }
     }
Exemple #2
0
        private (object, ParameterInfo[]) CreateObject(Type t)
        {
            ConstructorInfo[] ctors = t.GetConstructors();
            if (ctors.Length == 0 && t.IsClass)
            {
                return(null, null);
            }

            ctors.OrderByDescending(ci => ci.GetParameters().Length);

            object obj = null;

            ParameterInfo[] ctorParamInfos = null;

            foreach (ConstructorInfo ctor in ctors)
            {
                ParameterInfo[] parametersInfo = ctor.GetParameters();
                object[]        parameters     = new object[parametersInfo.Length];
                for (int i = 0; i < parameters.Length; i++)
                {
                    FakerConfig.Rule rule = config?.Rules.Find(Rule => (Rule.MemberType == parametersInfo[i].ParameterType && Rule.MemberName == parametersInfo[i].Name));
                    if (rule != null)
                    {
                        parameters[i] = (Activator.CreateInstance(rule.GeneratorType) as IGenerator).Generate(new GeneratorContext(rule.MemberType));
                    }
                    else
                    {
                        parameters[i] = Create(parametersInfo[i].ParameterType);
                    }
                }

                try
                {
                    obj            = ctor.Invoke(parameters);
                    ctorParamInfos = parametersInfo;
                    break;
                }
                catch
                {
                    continue;
                }
            }

            if (obj == null && t.IsValueType)
            {
                try
                {
                    return(Activator.CreateInstance(t), new ParameterInfo[0]);
                }

                catch
                {
                    return(null, null);
                }
            }
            else if (obj == null)
            {
                return(null, null);
            }

            return(obj, ctorParamInfos);
        }