Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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;
        }