protected RawMapping <TSource, TDest> CreateMap <TSource, TDest>()
        {
            if (_rawMappings == null)
            {
                _rawMappings = new List <RawMapping>();
            }

            var mapping = new RawMapping <TSource, TDest>();

            _rawMappings.Add(mapping);
            return(mapping);
        }
        public static RawMapping <TSource, TDest> Parse <TSource, TDest>(Expression <Func <TSource, TDest> > expression)
        {
            var rawMapping = new RawMapping <TSource, TDest>();

            foreach (MemberAssignment binding in ((MemberInitExpression)expression.Body).Bindings)
            {
                var destParam        = Expression.Parameter(typeof(TDest), "dest");
                var sourceParam      = Expression.Parameter(typeof(TSource), "source");
                var dest             = Expression.Lambda(Expression.MakeMemberAccess(destParam, binding.Member), destParam);
                var sourceExpression = ExpressionUtils.ReplaceParameter(binding.Expression, expression.Parameters[0], sourceParam);
                var source           = Expression.Lambda(sourceExpression, sourceParam);
                rawMapping.AddExpressionPair(source, dest);
            }

            return(rawMapping);
        }