Ejemplo n.º 1
0
        private object[] GenerateConstructorParameters(ParameterInfo[] parameters, Type t)
        {
            if (parameters.Length == 0)
            {
                return(null);
            }
            List <object> generatedParameters    = new List <object>();
            bool          canUseCustomGenerators = conf != null && conf.ClassHasCustomGenerators(t);

            foreach (ParameterInfo param in parameters)
            {
                if (canUseCustomGenerators)
                {
                    if (conf.FieldOrPropertyHasCustomGenerator(t, AdditionalFunction.ProceedParameterName(param.Name), out IBaseGenerator g))
                    {
                        generatedParameters.Add(g.Generate(new GeneratorContext(rand, param.ParameterType, this)));
                        continue;
                    }
                }
                else
                {
                    try
                    {
                        generatedParameters.Add(Create(param.ParameterType));
                    }
                    catch (ArgumentException)
                    {
                        generatedParameters.Add(null);
                    }
                }
            }
            return(generatedParameters.ToArray());
        }
Ejemplo n.º 2
0
        private void FillObject(object obj)
        {
            Type type = obj.GetType();

            FieldInfo[]    fields                 = type.GetFields();
            PropertyInfo[] properties             = type.GetProperties();
            bool           canUseCustomGenerators = conf != null && conf.ClassHasCustomGenerators(obj.GetType());

            foreach (FieldInfo field in fields)
            {
                if (!AdditionalFunction.IsFilled(field, obj))
                {
                    resolver.AddReference(field.FieldType, field);
                    if (resolver.CanCreateAnObject(field.FieldType, field))
                    {
                        if (canUseCustomGenerators && conf.FieldOrPropertyHasCustomGenerator(obj.GetType(), field.Name, out IBaseGenerator g))
                        {
                            field.SetValue(obj, g.Generate(new GeneratorContext(rand, field.FieldType, this)));
                            resolver.RemoveReference(field.FieldType, field);
                            continue;
                        }
                        else
                        {
                            try
                            {
                                field.SetValue(obj, Create(field.FieldType));
                            }
                            catch (ArgumentException)
                            {
                                field.SetValue(obj, null);
                            }
                        }
                    }
                    else
                    {
                        field.SetValue(obj, null);
                    }
                    resolver.RemoveReference(field.FieldType, field);
                }
            }
            foreach (PropertyInfo property in properties)
            {
                if (property.CanWrite && !AdditionalFunction.IsFilled(property, obj))
                {
                    resolver.AddReference(property.PropertyType, property);
                    if (canUseCustomGenerators && conf.FieldOrPropertyHasCustomGenerator(obj.GetType(), property.Name, out IBaseGenerator g))
                    {
                        property.SetValue(obj, g.Generate(new GeneratorContext(rand, property.PropertyType, this)));
                        resolver.RemoveReference(property.PropertyType, property);
                        continue;
                    }
                    else
                    {
                        try
                        {
                            property.SetValue(obj, Create(property.PropertyType));
                        }
                        catch (ArgumentException)
                        {
                            property.SetValue(obj, null);
                        }
                    }
                    resolver.RemoveReference(property.PropertyType, property);
                }
            }
        }