MappingProfiles.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using AipGateway.API.Domain.IServices.IUtilities;
  2. using AutoMapper;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Reflection;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace AipGateway.API.Domain.Common.Utilities
  10. {
  11. public class MappingProfiles : Profile
  12. {
  13. public MappingProfiles()
  14. {
  15. ApplyMappingsFromAssembly(Assembly.GetExecutingAssembly());
  16. }
  17. private void ApplyMappingsFromAssembly(Assembly assembly)
  18. {
  19. var types = assembly.GetExportedTypes()
  20. .Where(t => t.GetInterfaces()
  21. .Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IMapFrom<>)))
  22. .ToList();
  23. foreach (var type in types)
  24. {
  25. var instance = Activator.CreateInstance(type);
  26. var methodInfo = type.GetMethod("Mapping")
  27. ?? type.GetInterface("IMapFrom`1").GetMethod("Mapping");
  28. methodInfo?.Invoke(instance, new object[] { this });
  29. }
  30. }
  31. }
  32. }