public IMemberConfiguration <T, TN> Member <TMember, TNMember>(Expression <Func <TN, TNMember> > dest, Expression <Func <T, TMember> > src)
        {
            if (dest == null)
            {
                throw new ArgumentNullException("dest");
            }

            var memberExpression = dest.Body as MemberExpression;

            if (memberExpression == null)
            {
                throw new Exception("MemberExpression should return one of the properties of destination class");
            }

            var propertyInfo = typeof(TN).GetProperty(memberExpression.Member.Name);

            if (propertyInfo.CanWrite && propertyInfo.GetSetMethod(true).IsPublic)
            {
                _typeMapper.MapMember(dest, src);
            }
            return(this);
        }
 /// <summary>
 /// Skip specified convention member mapping and use a custom function to map to the target member.
 /// </summary>
 /// <typeparam name="TSource">The source type.</typeparam>
 /// <typeparam name="TTarget">The target type.</typeparam>
 /// <typeparam name="TSourceMember">The type of the member to map to of the source.</typeparam>
 /// <typeparam name="TTargetMember">The type of the member to map to of the target.</typeparam>
 /// <param name="typeMapper">The type mapping strategy.</param>
 /// <param name="targetMember">The expression of the target member to map to.</param>
 /// <param name="expression">Callback to map from source type to the target member</param>
 /// <returns>The type mapping strategy.</returns>
 public static ITypeMapper <TSource, TTarget> MapMember <TSource, TTarget, TSourceMember, TTargetMember>(
     this ITypeMapper <TSource, TTarget> typeMapper, Expression <Func <TTarget, TSourceMember> > targetMember,
     Func <TSource, TTargetMember> expression)
 {
     return(typeMapper.MapMember(ExtractMember(targetMember).Member.Name, expression));
 }