Добрый вечер!
В настоящее время я ищу способ "отфильтровать" объект перед отправкой его в мой репозиторий;то есть, сохраняя некоторые свойства из исходного экземпляра, игнорируя или заменяя другие значениями по умолчанию, в зависимости от контекста.На самом деле, я считаю, что это может быть способом заменить все мои DTO, где преобразование типов не требуется, при этом защищая мое приложение от «чрезмерной публикации», как описано в блоге Брэда Уилсона .
Другими словами, я пытаюсь заменить:
public class UserRegistrationModel {
public string FirstName { get; set; }
public string Gender { get; set; }
public string LastName { get; set; }
}
public class UserGenderEditModel {
public string Gender { get; set; }
}
public class User {
public string FirstName { get; set; }
public string Gender { get; set; }
public bool IsVIP { get; set; }
public string LastName { get; set; }
}
class Program {
static void Main(string[] args) {
Mapper.CreateMap<UserRegistrationModel, User>()
.ForMember(d => d.FirstName, o => o.MapFrom(s => s.FirstName))
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
.ForMember(d => d.IsVIP, o => o.UseValue(false))
.ForMember(d => d.LastName, o => o.MapFrom(s => s.LastName));
Mapper.CreateMap<UserGenderEditModel, User>()
.ForMember(d => d.FirstName, o => o.Ignore())
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
.ForMember(d => d.IsVIP, o => o.Ignore())
.ForMember(d => d.LastName, o => o.Ignore());
var user = Mapper.Map<UserRegistrationModel, User>(new UserRegistrationModel {
// filling properties
});
}
}
чем-то вроде этого (не работает, конечно!):
public class User {
public string FirstName { get; set; }
public string Gender { get; set; }
public bool IsVIP { get; set; }
public string LastName { get; set; }
}
class Program {
static void Main(string[] args) {
Mapper.CreateMap<User, User>()
.ForMember(d => d.FirstName, o => o.MapFrom(s => s.FirstName))
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
.ForMember(d => d.IsVIP, o => o.UseValue(false))
.ForMember(d => d.LastName, o => o.MapFrom(s => s.LastName))
.ForContext("UserRegistration"); // not real.
Mapper.CreateMap<User, User>()
.ForMember(d => d.FirstName, o => o.Ignore())
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
.ForMember(d => d.IsVIP, o => o.Ignore())
.ForMember(d => d.LastName, o => o.Ignore());
.ForContext("UserGenderEdition"); // not real.
var user = Mapper.Map<User, User>(new User {
// filling properties
}, "UserRegistration"); // not real.
}
}
Итак, есть лиспособ достижения этой работы (не обязательно с AutoMapper)?
Тем не менее, я не ищу что-то непосредственно связанное с механизмом привязки модели MVC , так как я хотел бы использовать это ввеб-сервис или консольное приложение, например.
Спасибо!