У меня есть два одинаковых класса в разных пространствах имен:
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?
Если вы хотите установить свойство в конструкторе, используйте .ConstructUsing
а затем проигнорируйте это поле:
Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>()
.ConstructUsing(cls1 => new ClassLibrary2.Class1(cls1.field1))
.ForMember(a => a.field1, a => a.Ignore());