Comment gérer les Propriétés personnalisées dans AutoMapper

J'ai un ViewModel qui prend un certain Modèle de données et modifie légèrement.

La façon dont je suis en train de faire "travaille" depuis que je viens de passer le DomainModel au constructeur pour le ViewModel, mais depuis que je suis en utilisant AutoMapper sur certains de mes un-à-un Viewmodel, je pensais que je voudrais essayer et apprendre à faire de la cartographie à travers tous les ViewModels.

Voici un exemple d'un ViewModel qui ne un peu plus.

public class UsersDetailsViewModel
{
public string UserName { get; set; }
public string Email { get; set; }
public string Website { get; set; }
public int ID { get; set; }
public List<OpenID> OpenIds { get; set; }
public string UserAge { get; set; }
public string About { get; set; }
public string Slug { get; set; }
public System.DateTime LastSeen { get; set; }
public string Region { get; set; }
public string MemberSince { get; set; }
public string Reputation { get; set; }
public bool IsUserMatch { get; set; }
private readonly MarkdownDeep.Markdown _markdown;
public UsersDetailsViewModel(Domain.User user)
{
AuthUserData currentuser = AuthenticationHelper.RetrieveAuthUser;
_markdown.NoFollowLinks = true;
_markdown.SafeMode = true;
_markdown.ExtraMode = false;
_markdown.MarkdownInHtml = true;
//We want to ensure that the user has a username, even if they
//haven't set one yet. What this does is check to see if the
//user.UserName field is blank, and if it is, it will set the
//username to "UserNNNN" where NNNN is the user ID number.
_UserName = (user.UserName != null) ? user.UserName : "User" + user.ID.ToString;
//Nothing fancy going on here, we're just re-passing the object from
//the database to the View. No data manipulation!
_Email = user.Email;
_Website = user.WebSite;
_ID = user.ID;
//Get's a list of all of the user's OpenID's
_OpenIds = user.OpenIDs.ToList;
//Converts the users birthdate to an age representation
_UserAge = user.BirthDate.ToAge;
//IE: 29
//Because some people can be real ass holes and try to submit bad
//data (scripts and shitè) we have to modify the "About" content in
//order to sanitize it.  At the same time, we transform the Markdown
//into valid HTML. The raw input is stored without sanitization in
//the database.  this could mean Javascript injection, etc, so the
//output ALWAYS needs to be sanitized.
//This method below was used in conjunction with MarkDownSharp
//_About = Trim(Utilities.HtmlSanitizer.Sanitize(Markdown.Transform(user.About)))
_About = _markdown.Transform(user.About);
//Removes spaces from Usernames in order to properly display the
//username in the address bar
_Slug = Strings.Replace(user.UserName, " ", "-");
//Returns a boolean result if the current logged in user matches the
//details view of tBhe user in question.  This is done so that we can
//show the edit button to logged in users.
_IsUserMatch = (currentuser.ID == user.ID);
//Grabs the users registration data and formats it to a <time> tag
//for use with the timeago jQuery plugin
_MemberSince = user.MemberSince;
//Grabs the users last activity and formats it to a <time> tag
//for use with the timeago jQuery plugin
_LastSeen = user.ActivityLogs.Reverse.FirstOrDefault.ActivityDate;
//Formats the users reputation to a comma Deliminated number 
//   IE: 19,000 or 123k
_Reputation = user.Reputation.ToShortHandNumber;
//Get the name of the users Default Region.
_Region = user.Region.Name.FirstOrDefault;
}
}

Et voici comment j'ai actuellement utiliser le ci-dessus ViewModel

public ActionResult Details(int id)
{
User user = _userService.GetUserByID(id);
if (user != null) {
Domain.ViewModels.UsersDetailsViewModel userviewmodel = new Domain.ViewModels.UsersDetailsViewModel(user);
return View(userviewmodel);
} else {
//Because of RESTful URL's, some people will want to "hunt around"
//for other users by entering numbers into the address.  We need to
//gracefully redirect them to a not found page if the user doesn't
//exist.
throw new ResourceNotFoundException();
}
}

Comment puis-je utiliser (ou devrais-je utiliser) AutoMapper à la carte de mon DomainModel à mon ViewModel tout en faisant de la transformation que vous voyez ci-dessus?

OriginalL'auteur Chase Florell | 2012-02-03