/// <summary> /// Determines if a mapping exists in this <see cref="MapperContext"/>. /// </summary> /// <param name="destinationType"></param> /// <param name="sourceType"></param> /// <returns></returns> public bool Contains(Type destinationType, Type sourceType) { var hash = Mapping.ComputeHash(destinationType, sourceType); Lock.EnterReadLock(); try { return(MappingRows.ContainsKey(hash)); } finally { Lock.ExitReadLock(); } }
/// <summary> /// Determines if a mapping exists in this <see cref="MapperContext"/>. /// </summary> /// <param name="item"></param> /// <returns></returns> public bool Contains(Mapping item) { var hash = Mapping.ComputeHash(item); Lock.EnterReadLock(); try { return(MappingRows.ContainsKey(hash)); } finally { Lock.ExitReadLock(); } }
/// <summary> /// Merges another <see cref="MapperContext"/> with this instance of <see cref="MapperContext"/>. /// </summary> /// <remarks> /// This will modify current object. /// </remarks> /// <param name="mapperContext"></param> /// <param name="mergeBehavior"></param> /// <exception cref="InvalidOperationException"></exception> /// <exception cref="ArgumentOutOfRangeException"></exception> public void MergeWith(MapperContext mapperContext, MapperContextMergeBehavior mergeBehavior = MapperContextMergeBehavior.ThrowException) { switch (mergeBehavior) { case MapperContextMergeBehavior.OverwriteDuplicates: { Lock.EnterWriteLock(); try { foreach (var row in mapperContext.MappingRows) { MappingRows[row.Key] = row.Value; } } finally { Lock.ExitWriteLock(); } break; } case MapperContextMergeBehavior.SkipDuplicates: { Lock.EnterWriteLock(); try { foreach (var row in mapperContext.MappingRows) { if (!MappingRows.ContainsKey(row.Key)) { MappingRows[row.Key] = row.Value; } } } finally { Lock.ExitWriteLock(); } break; } case MapperContextMergeBehavior.ThrowException: { Lock.EnterReadLock(); try { foreach (var row in mapperContext.MappingRows) { if (MappingRows.ContainsKey(row.Key)) { throw new InvalidOperationException(); } } } finally { Lock.ExitReadLock(); } break; } default: throw new ArgumentOutOfRangeException(nameof(mergeBehavior), mergeBehavior, null); } }