Сопоставление полей только для чтения с Automapper

1

У меня есть два одинаковых класса в разных пространствах имен:

namespace ClassLibrary1
class Class1
{
    public readonly int field1;
    public Class1(int value) { field1 = value; }
}

И такое же определение класса в пространстве имен ClassLibrary2.

Когда я пытаюсь использовать AutoMapper, я получаю это исключение:

Выражение должно быть записано. Имя параметра: left

Это код AutoMapper:

Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>();
var result = Mapper.Map<ClassLibrary2.Class1>(class1);

Но если я попробую это поле Excimable AutoMapper, это не сработает, используя это:

Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>()
    .ForMember(a => a.field1, a => a.Ignore());

Конечно, он работает, чтобы изменить его на свойство с открытым доступом и частным набором (например, в Automapper игнорировать свойства readonly), но я хочу, чтобы будущий разработчик не устанавливал значение после конструктора.

Есть ли способ решить это с помощью AutoMapper?

Теги:
automapper

1 ответ

3
Лучший ответ

Если вы хотите установить свойство в конструкторе, используйте .ConstructUsing а затем проигнорируйте это поле:

Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>()
    .ConstructUsing(cls1 => new ClassLibrary2.Class1(cls1.field1))
    .ForMember(a => a.field1, a => a.Ignore());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню