C# AutoMapper от DTO до места назначения с использованием имени динамического свойства?

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

На данный момент мой вариант использования довольно прост. Я сопоставляю DTO с объектами домена с помощью AutoMapper.

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

Было бы хорошо, если бы я мог использовать автоматическое разрешение имен AutoMapper для всех сопоставлений свойств, кроме единственного поля «Ключ».

Поле «Ключ» в доменной сущности следует соглашению «Ключ» и всегда является строкой.

Поле «Ключ» в DTO можно переписать, чтобы оно соответствовало объектам домена, что позволяет использовать сопоставление на основе имени во всех случаях, но мне любопытно, каким было бы решение, если бы я хотел использовать PropertyInfo в своем выражении ForMember. , или если это вообще возможно.

ForAllMaps + строка на основе ForMember / MapFrom.

Lucian Bargaoanu 22.03.2018 18:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
389
1

Ответы 1

Я полагаю, вы могли бы использовать 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} ???"; });
});

Другие вопросы по теме