C'est une question que j'ai fait des recherches aussi, et pour mon cas d'utilisation, il semble être valueinjecter mains vers le bas. Il ne nécessite aucune configuration précédente à utiliser (peut frapper la performance, je suppose, même si intelligemment mis en œuvre, il peut mettre en cache les mappages pour les futurs appels plutôt que de réfléchir à chaque fois), de sorte que vous n'avez pas besoin de saisir tous les mappages avant de les utiliser.
Mais le plus important, il permet de cartographie inverse. Maintenant j'ai peut-être raté quelque chose ici comme Jimmy mentionne qu'il ne voit pas de cas d'utilisation où il est nécessaire, donc j'ai peut-être le modèle de mal, mais mon cas est que je suis de la création d'un ViewModel objet de mon ORM. Je puis les affiche sur ma page web. Une fois que l'utilisateur a terminé l'-je obtenir le ViewModel de retour en tant que httppost, comment cela est-il converti à l'origine de l'ORM classes? J'aimerais savoir le modèle avec automapper. Avec ValueInjector il est trivial, et il sera même unflatten. e.g la Création d'une nouvelle entité
Le modèle créé par le entityframework (premier modèle):
public partial class Family
{
public int Id { get; set; }
public string FamilyName { get; set; }
public virtual Address Address { get; set; }
}
public partial class Address
{
public int Id { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string TownCity { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
public virtual Family Family { get; set; }
}
Le ViewModel (ce que je peux décorer avec les validateurs):
public class FamilyViewModel
{
public int Id { get; set; }
public string FamilyName { get; set; }
public int AddressId { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string AddressTownCity { get; set; }
public string AddressCounty { get; set; }
public string AddressPostcode { get; set; }
}
Le ViewController:
//
// GET: /Family/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Family/Create
[HttpPost]
public ActionResult Create(FamilyViewModel familyViewModel)
{
try
{
Family family = new Family();
family.InjectFrom<UnflatLoopValueInjection>(familyViewModel);
db.Families.Add(family);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
À mon avis, il ne va pas beaucoup plus simple que cela?
(Si cela soulève la question, quoi de mal avec le modèle que j'ai exécuté ce (et il semble que beaucoup d'autres), que ce n'est pas considéré comme de valeur à AutoMapper?)
Toutefois, si cette tendance comme decscribed, est celui que vous souhaitez utiliser, puis mon vote est valueinjecter dans un pays lointain.