internal virtual void Initialize(IntelligentCreator creator) { if (_forType.HasPublicParameterlessConstructor()) CreateUsing(() => Activator.CreateInstance(_forType)); foreach (var property in _forType.GetProperties()) { if (property.CanWrite == false) continue; var design = creator.FindDesignFor(property.PropertyType); if (design == null) continue; _steps.Add(new DesignStep(creator, property.Name, design)); } }
internal virtual object Generate(IntelligentCreator creator, int currentDepth) { if (currentDepth > RecursiveDepth) return null; //Setup: Constructor Initialize(creator); //Create object using specified function object result = null; if (_createUsing == null) return null; result = _createUsing.Invoke(); //Populate each property foreach (var step in _steps) step.Populate(result, ListSize, currentDepth); return result; }