Как добавить существующий профиль в конфигурацию Mapper с помощью Refection (в общем) - PullRequest
0 голосов
/ 08 октября 2019

У меня есть отдельные классы для отображения между источником и местом назначения. Например,

RegistrationMapping:

public class RegistrationMapping
{
    public static void Map(IProfileExpression profile)
    {
       profile.CreateMap<DB_Registration, Registration>()
            .ForMember(x => x.EMP_ID, map => map.MapFrom(c => c.employeeID))
            .ForMember(x => x.MOB_NO, map => map.MapFrom(c => c.Mobile))
            .ForMember(x => x.EMAIL_ID, map => map.MapFrom(c => c.EmailID))
     }
}

Аналогичным образом у меня есть классы и для других сопоставлений.

Теперь в моем хранилище я хочу использовать вот так:

// I want to achieve below code in a generic way. 
var config = new MapperConfiguration(cfg => cfg.AddProfile(/*RegistrationMapping goes here*/)); 
var mappedConfigurations = config.GetAllTypeMaps(); // This line of code is needed for my other purpose(get unmapped properties) 

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 08 октября 2019

AutoMapper позволяет загружать профили, передавая сборку, имя сборки или тип, содержащийся в сборке.

Ваш класс RegistrationMapping и другие должны быть унаследованы от AutoMapper.Profile.

Вы можете загружать свои профили следующим образом:

По типу:

Mapper.Initialize(x => x.AddProfile<RegistrationMapping>()); 
Mapper.Initialize(x => x.AddProfile(typeof(RegistrationMapping))); 

По экземпляру:

Mapper.Initialize(x => x.AddProfiles(new List<Profile> { new RegistrationMapping() })); 
Mapper.Initialize(x => x.AddProfile(new RegistrationMapping())); 

По имени сборки:

Mapper.Initialize(x => x.AddMaps("MyApplication.RegistrationMapping"));
Mapper.Initialize(x => x.AddMaps(new string[] {"MyApplication.RegistrationMapping"}));

По сборке:

Mapper.Initialize(x => x.AddMaps(Assembly.GetExecutingAssembly()));

Если вы хотите загрузить все профили из загруженных сборок:

var profiles = AppDomain.CurrentDomain.GetAssemblies()
            .SelectMany(a => a.GetTypes().Where(type => typeof(Profile).IsAssignableFrom(type)));
Mapper.Initialize(x => x.AddMaps(profiles));

Для получения дополнительной информации см. Также документацию AutoMapper Configuration и исходный код .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...