Esempio n. 1
0
        private readonly ConcurrentDictionary <Type, object> _unconstrainedFactoryCache = new ConcurrentDictionary <Type, object>(); //new MemoryCache("constrained");

        public FakeChainFactory(
            CachedReturnValueGeneration cachedReturnValueGeneration,
            NestingLimit nestingLimit,
            ProxyGenerator proxyGenerator,
            IValueGenerator valueGenerator,
            ICollectionGenerator collectionGenerator)
        {
            _cachedReturnValueGeneration = cachedReturnValueGeneration;
            _nestingLimit        = nestingLimit;
            _proxyGenerator      = proxyGenerator;
            _valueGenerator      = valueGenerator;
            _collectionGenerator = collectionGenerator;
        }
 /// <summary>
 /// Creates an instance using the given <see cref="ProBase.Generation.Method.ICollectionGenerator"/> for generating the parameter array.
 /// </summary>
 /// <param name="arrayGenerator">The array generator to use</param>
 /// <param name="procedureCallGenerator">The generator used for generating the procedure call</param>
 public DbMethodGenerator(ICollectionGenerator arrayGenerator, IMethodCallGenerator procedureCallGenerator)
 {
     this.arrayGenerator         = arrayGenerator;
     this.procedureCallGenerator = procedureCallGenerator;
 }
Esempio n. 3
0
 public PopulationService(IRatioCalculator ratioCalculator, ICollectionGenerator collectionGenerator)
 {
     _ratioCalculator     = ratioCalculator;
     _collectionGenerator = collectionGenerator;
 }
Esempio n. 4
0
        public object Create(Type type)
        {
            var    objectType = type;
            object generated  = null;

            if (isBeingGenerated(objectType))
            {
                return(null);
            }
            var generator = /*Generators.shared.*/ Generators.GetGeneratorByType(objectType);

            if (generator != null)
            {
                generated = /*Generators.shared.*/ generator.CreateInstance();
            }
            else
            {
                if (!objectType.IsPrimitive /*objectType.IsClass*/ && !objectType.IsAbstract && !objectType.IsGenericType)
                {
                    this.generationStack.Push(objectType);
                    var constructorsList = objectType.GetConstructors();
                    if (constructorsList.Length > 0)
                    {
                        ConstructorInfo suitableConstructorInfo = constructorsList[0];
                        int             maxParamsNum            = suitableConstructorInfo.GetParameters().Length;

                        for (int i = 1; i < constructorsList.Length; i++)
                        {
                            var paramsLen = constructorsList[i].GetParameters().Length;
                            if (paramsLen > maxParamsNum)
                            {
                                maxParamsNum            = paramsLen;
                                suitableConstructorInfo = constructorsList[i];
                            }
                        }
                        var parameters = suitableConstructorInfo.GetParameters();

                        List <object> paramsValues = new List <object>();
                        for (int i = 0; i < maxParamsNum; i++)
                        {
                            Type parameterType = parameters[i].ParameterType;
                            for (int j = 0; j < this.configs.Count; j++)
                            {
                                var  config            = this.configs[j];
                                Type configType        = config.GetType();
                                var  genericParameters = configType.GetGenericArguments();
                            }
                            object paramValue = this.Create(parameterType);
                            paramsValues.Add(paramValue);
                        }
                        generated = suitableConstructorInfo.Invoke(paramsValues.ToArray());
                    }
                    else
                    {
                        generated = Activator.CreateInstance(objectType);
                    }
                    var properties  = objectType.GetProperties();
                    var otherFields = objectType.GetFields();
                    foreach (var field in otherFields)
                    {
                        for (int j = 0; j < this.configs.Count; j++)
                        {
                            var  config            = this.configs[j];
                            Type configType        = config.GetType();
                            var  genericParameters = configType.GetGenericArguments();
                        }
                        var fieldValue = Create(field.FieldType);
                        field.SetValue(generated, fieldValue);
                    }
                    foreach (var property in properties)
                    {
                        var propertyValue = Create(property.PropertyType);
                        if (property.CanWrite)
                        {
                            property.SetValue(generated, propertyValue);
                        }
                    }
                    this.generationStack.Pop();
                }
                else if (objectType.IsGenericType)
                {
                    //handle collections;
                    generated = Generators.listGenerator.Generate(objectType.GetGenericArguments()[0]);
                }
                else if (!objectType.IsPrimitive && objectType.IsValueType)
                {
                    //handle structs;
                    generated = Activator.CreateInstance(objectType);
                    var otherFields = objectType.GetFields();
                    foreach (var field in otherFields)
                    {
                        var fieldValue = Create(field.FieldType);
                        field.SetValue(generated, fieldValue);
                    }
                }
                else if (objectType.IsGenericType)
                {
                    ICollectionGenerator collectionGenerator = Generators.GetGeneratorByType(objectType) as ICollectionGenerator;
                    if (collectionGenerator != null)
                    {
                        generated = collectionGenerator.Generate(objectType.GenericTypeArguments[0]);
                    }
                }
            }
            return(generated);
        }
Esempio n. 5
0
 public SpecialCasesOfResolutions(ICollectionGenerator collectionGenerator)
 {
     _collectionGenerator = collectionGenerator;
 }
Esempio n. 6
0
 public ResolutionOfArrays(ICollectionGenerator collectionGenerator)
 {
     _collectionGenerator = collectionGenerator;
 }