/// <summary> /// Get value. /// </summary> /// <param name="valueProvider">The <see cref="IPopulaterValueProvider"/>.</param> /// <param name="type">The value type.</param> /// <param name="prefix">Prefix for string values.</param> /// <param name="depth">Depth of value within object hierarchy.</param> /// <returns>The value.</returns> protected object GetValue(IPopulaterValueProvider valueProvider, Type type, string prefix, int depth) { object value = null; TypeInfo typeInfo = type.GetTypeInfo(); if (_generatorDictionary.ContainsKey(type)) { value = _generatorDictionary[type](valueProvider, prefix); } else if (typeInfo.IsArray) { value = GetArray(valueProvider, type.GetElementType(), prefix, depth + 1); } else if (_iListTypeInfo.IsAssignableFrom(type)) { value = GetList(valueProvider, typeInfo, prefix, depth + 1); } else if (_iEnumerableTypeInfo.IsAssignableFrom(type)) { value = GetIEnumerable(valueProvider, typeInfo, prefix, depth + 1); } else if (typeInfo.IsClass) { value = GetClassInstance(valueProvider, type, depth + 1); } else if (typeInfo.IsEnum) { value = valueProvider.GetEnum(type); } return(value); }