J'utilise Automapper pour convertir entre mes modèles EF4 et mes ViewModels. Automapper a besoin des relations de carte déclarées et je me retrouve à les copier/coller dans le constructeur de chaque contrôleur. Où puis-je placer les déclarations de mappage afin qu'elles ne soient appelées qu'une fois et pas à chaque fois qu'un contrôleur est instancié? Est-ce possible?ASP.NET MVC 2 Automapper Placement
3
A
Répondre
5
Vous pouvez le mettre dans le application_start()
du global.asax
Actuellement, j'ai une méthode statique que j'appelle de la Application_Start qui initialise tous mes applications. Library.AutoMapping.RegisterMaps();
AutoMapper.Mapper.CreateMap(typeof(CoolObject), typeof(CoolObjectViewModel));
AutoMapper.Mapper.CreateMap<CoolObject, CoolObjectViewModel>()
.ForMember(d => d.Property1, f => f.MapFrom(s => s.Property1))
.ForMember(d => d.Property2, f => f.MapFrom(s => s.Property2))
.ForMember(d => d.Property3, f => f.MapFrom(s => s.Property3));
Donc, mon contrôleur ressemble à quelque chose comme ça. Vous remarquerez que le constructeur HomeController nécessite un IDataContext. J'inscris IDataContext avec Ninject au niveau RequestScope et un DataContext est instancié pour moi et injecté dans mon contrôleur. C'est de là que provient mon référentiel de niveau de requête.
public class HomeController : Controller {
IDataContext dataContext;
public HomeController(IDataContext dataContext) {
this.dataContext = dataContext;
}
}
J'ai une explication un peu plus détaillée sur Ninject ici http://buildstarted.com/2010/08/24/dependency-injection-with-ninject-moq-and-unit-testing/
Merci pour votre réponse. Mes maps dépendent de l'initialisation d'un référentiel typé comme l'un de mes objets de table EF4. Je souhaite étendre le référentiel à la demande. Ces cartes seront-elles valables si j'utilise ensuite un autre ensemble de repos pour mes opérations CRUD? – John
C'est à peu près la même chose que je fais. J'utilise Ninject pour initialiser mon dépôt et je n'ai eu aucun problème avec le mapping. Cependant, j'utilise 'Mapper.CreateMap (typeof (CoolOject), typeof (CoolObjectViewModel))' – Buildstarted
Où effectuez-vous votre initialisation repo de sorte qu'il est 'par requête http'? – John