Я изучал настраиваемые преобразователи на основе свойств для этого, но, похоже, я нахожу код только для более старой версии AutoMapper.
На данный момент мой вариант использования довольно прост. Я сопоставляю DTO с объектами домена с помощью AutoMapper.
Имена полей в DTO и объектах домена совпадают на 100%, за исключением одного поля на пару, в дальнейшем называемого «ключевым полем». На данный момент у меня около 20 пар DTO -> Domain, и это число будет расти.
Было бы хорошо, если бы я мог использовать автоматическое разрешение имен AutoMapper для всех сопоставлений свойств, кроме единственного поля «Ключ».
Поле «Ключ» в доменной сущности следует соглашению «Ключ» и всегда является строкой.
Поле «Ключ» в DTO можно переписать, чтобы оно соответствовало объектам домена, что позволяет использовать сопоставление на основе имени во всех случаях, но мне любопытно, каким было бы решение, если бы я хотел использовать PropertyInfo в своем выражении ForMember. , или если это вообще возможно.





Я полагаю, вы могли бы использовать PropertyInfo. Как насчет использования AfterMap для установки значения ключевого свойства:
class Entity
{
public int Key { get; set; }
public int MyProperty1 { get; set; }
}
class Dto
{
public dynamic MyKeyProperty { get; set; }
public int MyProperty1 { get; set; }
}
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Entity, Dto>()
.ForMember(nameof(Dto.MyKeyProperty), c => c.Ignore())
.AfterMap((e, d) => { d.MyKeyProperty = $"{e.Key} ???"; });
});
ForAllMaps + строка на основе ForMember / MapFrom.