public void Add <TTarget>(Action <TargetConfiguration <TTarget> > action) { TargetConfiguration <TTarget> configuration = new TargetConfiguration <TTarget>(); action(configuration); TargetConfigurations.Add(typeof(TTarget), configuration); }
/// <summary> /// Finds the type of the enumerable which may be resolved from configuration. /// </summary> /// <param name="targetMember"></param> /// <param name="sourceEnumerable"></param> /// <param name="targetConfiguration"></param> /// <returns></returns> private static Type FindEnumerableType(IMember targetMember, IEnumerable sourceEnumerable, TargetConfiguration targetConfiguration) { Type enumerableType = null; if (sourceEnumerable != null) { // we have a source enumerable to loop from enumerableType = (sourceEnumerable).GetType().GenericTypeArguments.FirstOrDefault(); } else if (targetMember.Type.IsGenericType) { // the type is generic so get the first generic type i.e. IEnumerable<First>s enumerableType = targetMember.Type.GenericTypeArguments.FirstOrDefault(); } else if (targetMember.Type.IsArray) { // we have an array, get the array type i.e ArrayType[] enumerableType = targetMember.Type.GetElementType(); } if (enumerableType != null) { // attempt to find a type to use if (TryFindResolvedType(enumerableType, targetConfiguration, out Type resolvedType)) { return(resolvedType); } // we can't map to an abstract type we don't know how to map to else if (!enumerableType.IsAbstract) { return(enumerableType); } } return(null); }
/// <summary> /// Finds the source enumerable member. /// </summary> /// <param name="source"></param> /// <param name="targetMember"></param> /// <param name="targetConfiguration"></param> /// <param name="valueProvider"></param> /// <returns></returns> private static IEnumerable FindSourceEnumerable(object source, IMember targetMember, TargetConfiguration targetConfiguration, ValueProvider valueProvider) { string name = GetSourceNameOrDefault(targetMember, targetConfiguration); if (valueProvider.TryGetValue(source, name, out object sourceValue) && sourceValue is IEnumerable enumerable) { return(enumerable); } return(null); }
public TargetConfiguration(TargetConfiguration existingConfiguration) : base(existingConfiguration) { }