J'ai le crochet suivant dans mon Global.aspxQuel est le problème avec mon crochet AutoMapper Customer ValueResolver?
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
AutoMapper.Mapper.CreateMap<FormCollection, Models.IAmACustomer>().ForAllMembers(form => form.ResolveUsing<Models.FormCollectionValueResolver<Models.IAmACustomer>>());
}
Mon contrôleur:
[HttpPost]
public ActionResult Create(FormCollection formCollection)
{
var customer = AutoMapper.Mapper.Map<FormCollection,Models.IAmACustomer> (formCollection,null);
}
Cette ligne exécute mais mon résolveur personnalisé est jamais appelé.
Le résolveur ressemble à ceci:
public class FormCollectionValueResolver<TDestination>:ValueResolver<FormCollection,TDestination>
{
//Code removed for brevity
}
L'application compile et fonctionne, mais sans le résolveur personnalisé, rien ne vient dans l'objet, il crée simplement un objet simulé avec jets d'exception se accesseurs.
Un convertisseur de type ne contourne pas le mappage manuel des noms pour chaque objet métier que j'utilise dans tous les projets que j'espère que l'automapper va exécuter si je peux comprendre comment l'utiliser pour cela. Je ne vois pas quel est l'avantage de faire la conversion dans le modelbinder plutôt que dans le contrôleur? Aussi, cette réponse ne semble pas résoudre les problèmes si la validation ou la conversion a des problèmes comme une entrée d'utilisateur invalide pour laquelle l'objet client devrait lancer des exceptions. – Maslow
J'étais un peu hâtif dans ma réponse originale. J'ai fait un montage complet de celui-ci. J'espère que ma nouvelle réponse sera un peu plus utile. – mrydengren
Donc, si vous comprenez cette réponse correctement, le 'ForAllMembers()' ne s'applique qu'aux propriétés '.ForMember' définies par l'utilisateur. Existe-t-il un moyen de définir un générique ici où les noms de propriété dont vous avez besoin sont sans définir explicitement chacun? – Maslow