猿问

在哪里放置AutoMapper.CreateMaps?

我AutoMapper在ASP.NET MVC应用程序中使用。有人告诉我,我应该将AutoMapper.CreateMap其他位置移到其他地方,因为它们的开销很大。我不太确定如何设计我的应用程序以将这些调用放在一个地方。


我有一个Web层,服务层和一个数据层。每个项目都有自己的项目。我用Ninject一切都去DI。我将AutoMapper在Web和服务层中利用。


那么,您对AutoMapper“ CreateMap”的设置是什么?你放在哪里?你怎么称呼它?


慕后森
浏览 1096回答 3
3回答

潇潇雨雨

没关系,只要它是静态类即可。一切都与惯例有关。我们的约定是,每个“层”(Web,服务,数据)都有一个名为的文件AutoMapperXConfiguration.cs,并带有一个名为的方法Configure(),其中X是该层。Configure()然后,该private方法为每个区域调用方法。这是我们的Web层配置的示例:public static class AutoMapperWebConfiguration{&nbsp; &nbsp;public static void Configure()&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; ConfigureUserMapping();&nbsp; &nbsp; &nbsp; ConfigurePostMapping();&nbsp; &nbsp;}&nbsp; &nbsp;private static void ConfigureUserMapping()&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; Mapper.CreateMap<User,UserViewModel>();&nbsp; &nbsp;}&nbsp;&nbsp; &nbsp;// ... etc}我们为每个“聚合”(用户,发布)创建一个方法,因此可以很好地分离事物。然后您的Global.asax:AutoMapperWebConfiguration.Configure();AutoMapperServicesConfiguration.Configure();AutoMapperDomainConfiguration.Configure();// etc它有点像“单词的界面”-无法强制执行,但是您期望得到它,因此可以在必要时进行编码(和重构)。编辑:只是以为我提到我现在使用AutoMapper 配置文件,因此上面的示例变为:public static class AutoMapperWebConfiguration{&nbsp; &nbsp;public static void Configure()&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; Mapper.Initialize(cfg =>&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; cfg.AddProfile(new UserProfile());&nbsp; &nbsp; &nbsp; &nbsp; cfg.AddProfile(new PostProfile());&nbsp; &nbsp; &nbsp; });&nbsp; &nbsp;}}public class UserProfile : Profile{&nbsp; &nbsp; protected override void Configure()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Mapper.CreateMap<User,UserViewModel>();&nbsp; &nbsp; }}更清洁/更坚固。
随时随地看视频慕课网APP
我要回答