コード例 #1
0
        public void Add <TTarget>(Action <TargetConfiguration <TTarget> > action)
        {
            TargetConfiguration <TTarget> configuration = new TargetConfiguration <TTarget>();

            action(configuration);
            TargetConfigurations.Add(typeof(TTarget), configuration);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
 public TargetConfiguration(TargetConfiguration existingConfiguration)
     : base(existingConfiguration)
 {
 }