using AutoMapper; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace WebMainFrameForEap.ModelMappings { public class ModelMappingProfile : Profile { public ModelMappingProfile() { var sourceAndDestTypes = GetSourceAndDestTuples(); foreach (var sourceAndDestType in sourceAndDestTypes) { CreateMap(sourceAndDestType.SourceType, sourceAndDestType.DestType); CreateMap(sourceAndDestType.DestType, sourceAndDestType.SourceType); } } private IEnumerable GetSourceAndDestTuples() { var modelAssembly = typeof(AutoMapAttribute).Assembly; var sourceTypes = modelAssembly.GetExportedTypes() .Where(t => t.GetCustomAttributes().Any()); return sourceTypes.SelectMany(sourceType => { var destTypeAttributes = sourceType.GetCustomAttributes(); return destTypeAttributes.Select(destTypeAttribute => new SourceAndDestType { SourceType = sourceType, DestType = destTypeAttribute.SourceType }); }).ToList(); } } public class SourceAndDestType { public Type SourceType { get; set; } public Type DestType { get; set; } } }