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; }
public PopulationService(IRatioCalculator ratioCalculator, ICollectionGenerator collectionGenerator) { _ratioCalculator = ratioCalculator; _collectionGenerator = collectionGenerator; }
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); }
public SpecialCasesOfResolutions(ICollectionGenerator collectionGenerator) { _collectionGenerator = collectionGenerator; }
public ResolutionOfArrays(ICollectionGenerator collectionGenerator) { _collectionGenerator = collectionGenerator; }