示例#1
0
        /// <summary>Instructs Moo to map a source expression to the property expression below.</summary>
        /// <remarks>
        /// The argument parameter must be a property access expression, such as <c>(t) =&gt; t.Name</c>,
        /// or else an ArgumentException will be thrown.
        /// </remarks>
        /// <typeparam name="TInnerTarget">Type of the inner target property.</typeparam>
        /// <param name="argument">An expression fetching the property to map to.</param>
        /// <returns>A spec object allowing further fluent setup.</returns>
        public ISourceSpec <TSource, TTarget> To <TInnerTarget>(Expression <Func <TTarget, TInnerTarget> > argument)
        {
            Guard.CheckArgumentNotNull(argument, "argument");
            Guard.CheckArgumentNotNull(argument.Body, "argument.Body");
            ExpressionHandler.ValidatePropertyExpression(argument);

            if (UseInnerMapper)
            {
                ExpressionHandler.ValidatePropertyExpression(SourceArgument);
                Mapper.AddInnerMapper <TInnerSource, TInnerTarget>(
                    ExpressionHandler.GetProperty(SourceArgument),
                    ExpressionHandler.GetProperty(argument));

                return(new SourceSpec <TSource, TTarget>(Mapper));
            }
            else
            {
                Mapper.AddMappingAction(
                    ExpressionHandler.GetMemberName(SourceArgument.Body),
                    ExpressionHandler.GetMemberName(argument.Body),
                    ExpressionHandler.GetAction <TSource, TTarget>(SourceArgument, argument));

                return(new SourceSpec <TSource, TTarget>(Mapper));
            }
        }