예제 #1
0
파일: Faker.cs 프로젝트: Berk1034/Faker
        public object Create(Type type)
        {
            if (generationStack.Contains(type))
            {
                return(null);
            }
            if (type.IsAbstract || type.IsInterface || type == typeof(void))
            {
                return(null);
            }
            IGenerator value;

            Generators.TryGetValue(type, out value);
            if (value != null)
            {
                return(value.Generate());
            }
            if (type.IsGenericType)
            {
                Type t = type.GetType();
                return(listGenerator.Generate((Type)type.GenericTypeArguments.GetValue(0)));
            }
            if (!type.IsAbstract || !type.IsPrimitive)
            {
                generationStack.Push(type);
                ConstructorInfo ConstructorWithMaxArgs = GetConstructorWithMaxParams(type);
                if (ConstructorWithMaxArgs != null)
                {
                    var instance = GenerateObjectFromConstructor(ConstructorWithMaxArgs);
                    instance = GenerateFieldsAndProperties(type, instance);
                    generationStack.Pop();
                    return(instance);
                }
                else
                {
                    if (type.GetConstructors().Count() != 0)
                    {
                        var instance = Activator.CreateInstance(type);
                        instance = GenerateFieldsAndProperties(type, instance);
                        generationStack.Pop();
                        return(instance);
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
            return(null);
        }
예제 #2
0
파일: Faker.cs 프로젝트: Rytvinskaya/Faker
        public object Create <T>()
        {
            var type = typeof(T);

            if (_exludedTypes.Contains(type))
            {
                return(null);
            }
            _exludedTypes.Add(type);
            if (type.IsAbstract || type.IsInterface || type.IsPointer)
            {
                return(null);
            }
            if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List <>))
            {
                var listGenerator = new ListGenerator();
                _exludedTypes.Remove(type);
                return((T)listGenerator.Generate(type.GetGenericArguments()[0]));
            }
            if (_generators.TryGetValue(type, out var generator))
            {
                _exludedTypes.Remove(type);
                return((T)generator.Generate(type));
            }
            if (type.IsClass && !type.IsGenericType)
            {
                var instance = InitializeWithConstructor(type);
                if (instance != null)
                {
                    FillObject(instance);
                }
                _exludedTypes.Remove(type);
                return(instance);
            }
            if (type.IsValueType && !type.IsGenericType)
            {
                var instance = default(T);
                if (instance != null)
                {
                    FillObject(instance);
                    _exludedTypes.Remove(type);
                    return(instance);
                }
            }
            _exludedTypes.Remove(type);
            return(default(T));
        }