Example #1
0
        private IEnumerable <IRuleMapper> CreateRules(PropertyInfo[] sourceProperties, PropertyInfo[] destinyProperties)
        {
            var rules = new LinkedList <IRuleMapper>();

            foreach (var destinyProperty in destinyProperties)
            {
                var rule = _rules.FirstOrDefault(x => x.Match(destinyProperty));
                if (rule != null)
                {
                    rules.AddLast(rule);
                    continue;
                }

                var sourceProperty = sourceProperties.FirstOrDefault(x => x.Name == destinyProperty.Name);

                if (sourceProperty == null)
                {
                    continue;
                }

                rules.AddLast(ForRuleFactory.CreateRule(destinyProperty, sourceProperty, _hashCodeFactoryGenerator));
            }

            return(rules);
        }
Example #2
0
        /// <summary>
        /// Specific what property to property
        /// </summary>
        /// <typeparam name="TDestinyMember"></typeparam>
        /// <typeparam name="TSourceMember"></typeparam>
        /// <param name="destiny"></param>
        /// <param name="source"></param>
        /// <returns></returns>
        public virtual IMapperBuilder<TSource, TDestiny> For<TDestinyMember, TSourceMember>(Expression<Func<TDestiny, TDestinyMember>> destiny, Expression<Func<TSource, TSourceMember>> source)
        {

            if(destiny.Body.NodeType != ExpressionType.MemberAccess)
            {
                throw new NotSupportedException();
            }


            if(source.Body.NodeType != ExpressionType.MemberAccess)
            {
                throw new NotImplementedException();
            }

            var sourceProperty = ((source.Body as MemberExpression)!.Member as PropertyInfo)!;
            var destinyProperty = ((destiny.Body as MemberExpression)!.Member as PropertyInfo)!;
            _rules.Add(ForRuleFactory.CreateRule(destinyProperty, sourceProperty, _hashCodeFactoryGenerator));
            return this;
        }