В автомате, где вы создаете Карту, вы можете указать дополнительные процессы для конкретных членов типа назначения.
Так, где ваша карта по умолчанию будет
Mapper.Map<Domain.User, UsersDetailsViewModel>();
, существует свободный синтаксисЧтобы определить более сложные отображения:
Mapper.Map<Domain.User, UsersDetailsViewModel>()
.ForMember(vm=>vm.UserName, m=>m.MapFrom(u=>(u.UserName != null)
? u.UserName
: "User" + u.ID.ToString()));
Здесь ForMember принимает два аргумента, первый из которых определяет свойство, с которым вы отображаете.Второй предоставляет средства определения отображения.В качестве примера я выделил и показал одно из простых сопоставлений.
Если вам требуется более сложное сопоставление (например, сопоставление CurrentUser), вы можете создать класс, который реализует интерфейс IResolver, включая ваше сопоставление.логику в этих новых предложениях, а затем добавьте это в отображение.
Mapper.Map<Domain.User, UsersDetailsViewModel>()
.ForMember(vm=>vm.IsUserMatch, m=>m.ResolveUsing<MatchingUserResolver>()));
когда Mapper придет к отображению, он вызовет ваш собственный преобразователь.
Как только вы обнаружите синтаксис.ForMember метод все остальные виды слотов на место.