ModelMappingProfile.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using AutoMapper;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Reflection;
  6. namespace WebMainFrameForEap.ModelMappings
  7. {
  8. public class ModelMappingProfile : Profile
  9. {
  10. public ModelMappingProfile()
  11. {
  12. var sourceAndDestTypes = GetSourceAndDestTuples();
  13. foreach (var sourceAndDestType in sourceAndDestTypes)
  14. {
  15. CreateMap(sourceAndDestType.SourceType, sourceAndDestType.DestType);
  16. CreateMap(sourceAndDestType.DestType, sourceAndDestType.SourceType);
  17. }
  18. }
  19. private IEnumerable<SourceAndDestType> GetSourceAndDestTuples()
  20. {
  21. var modelAssembly = typeof(AutoMapAttribute).Assembly;
  22. var sourceTypes = modelAssembly.GetExportedTypes()
  23. .Where(t => t.GetCustomAttributes<AutoMapAttribute>().Any());
  24. return sourceTypes.SelectMany(sourceType =>
  25. {
  26. var destTypeAttributes = sourceType.GetCustomAttributes<AutoMapAttribute>();
  27. return destTypeAttributes.Select(destTypeAttribute =>
  28. new SourceAndDestType
  29. {
  30. SourceType = sourceType,
  31. DestType = destTypeAttribute.SourceType
  32. });
  33. }).ToList();
  34. }
  35. }
  36. public class SourceAndDestType
  37. {
  38. public Type SourceType { get; set; }
  39. public Type DestType { get; set; }
  40. }
  41. }