public TypeMapper(ITypeMappingFilter filter, IEnumerable<Type> sourceTypes, Action<TypeMapper> onMappingComplete)
{
if (filter == null)
throw new ArgumentNullException(nameof(filter));
if (sourceTypes == null)
throw new ArgumentNullException(nameof(sourceTypes));
Filter = filter;
this.sourceTypes = new HashSet<Type>(sourceTypes.Where(Filter.TypeIsMapped));
this.typeNameMap = this.sourceTypes.Select(FromType).ToDictionary(x => x.Name, x => x, StringComparer.OrdinalIgnoreCase);
if (onMappingComplete != null)
onMappingComplete(this);
}