Ejemplo n.º 1
0
        /// <summary>
        ///     Applies the convention to type member mappings.
        /// </summary>
        /// <param name="context">The context to apply convensions.</param>
        public void Apply(ConventionContext context)
        {
            MemberMapOptions options          = context.Options == MemberMapOptions.Default ? Options : context.Options;
            bool             includeNonPublic = (options & MemberMapOptions.NonPublic) == MemberMapOptions.NonPublic;

            MappingMember[] targetMembers =
                context.TargetMembers.Where(member => member.CanWrite(includeNonPublic)).ToArray();
            MappingMember[] sourceMembers =
                context.SourceMembers.Where(member => member.CanRead(includeNonPublic)).ToArray();
            StringComparison comparison = (options & MemberMapOptions.IgnoreCase) == MemberMapOptions.IgnoreCase
                ? StringComparison.CurrentCultureIgnoreCase
                : StringComparison.CurrentCulture;
            bool hierarchy = (options & MemberMapOptions.Hierarchy) == MemberMapOptions.Hierarchy;

            foreach (MappingMember targetMember in targetMembers)
            {
                foreach (MappingMember sourceMember in sourceMembers)
                {
                    if (string.Equals(sourceMember.MemberName, targetMember.MemberName, comparison) &&
                        (hierarchy || targetMember.MemberType.IsAssignableFrom(sourceMember.MemberType) ||
                         context.Converters.Get(sourceMember.MemberType, targetMember.MemberType) != null))
                    {
                        context.Mappings.Set(sourceMember, targetMember);
                        break;
                    }
                }
            }
        }
Ejemplo n.º 2
0
 internal void Apply(ConventionContext context)
 {
     foreach (IConvention convension in _convensions)
     {
         convension.Apply(context);
     }
 }
Ejemplo n.º 3
0
 public void Apply(ConventionContext context)
 {
     if (_action != null)
     {
         _action(context);
     }
 }
Ejemplo n.º 4
0
 private void Initialize()
 {
     if (!_initialized)
     {
         Thread.MemoryBarrier();
         lock (_lockObj)
         {
             if (!_initialized)
             {
                 var context = new ConventionContext(_container, typeof(TSource), typeof(TTarget), _options);
                 _container.Conventions.Apply(context);
                 _targetMembers = context.TargetMembers;
                 _memberMappers = new MemberMapperCollection(_container, _options);
                 foreach (MemberMapping mapping in context.Mappings)
                 {
                     _memberMappers.Set(mapping.TargetMember, mapping.SourceMember, mapping.Converter);
                 }
                 _initialized = true;
             }
         }
     }
 }