我AutoMapper在ASP.NET MVC应用程序中使用。有人告诉我我应该把它搬到AutoMapper.CreateMap别处,因为他们有很多开销。我不太确定如何设计我的应用程序以将这些调用放在一个地方。
AutoMapper
ASP.NET MVC
AutoMapper.CreateMap
我有一个 Web 层、服务层和一个数据层。每个都是自己的项目。我Ninject习惯于 DI 一切。我将AutoMapper在 Web 和服务层中使用。
Ninject
那么你对AutoMapperCreateMap 的设置是什么?你把它放在哪里?你怎么称呼它?
没关系,只要是静态类即可。一切都与 约定 有关。
我们的 约定 是每个“层”(web、服务、数据)都有一个名为 的文件AutoMapperXConfiguration.cs,以及一个名为 的方法Configure(),其中X层。
AutoMapperXConfiguration.cs
Configure()
X
然后该Configure()方法调用private每个区域的方法。
private
这是我们的 Web 层配置的示例:
public static class AutoMapperWebConfiguration { public static void Configure() { ConfigureUserMapping(); ConfigurePostMapping(); } private static void ConfigureUserMapping() { Mapper.CreateMap<User,UserViewModel>(); } // ... etc }
我们为每个“聚合”(用户、帖子)创建一个方法,因此可以很好地分离事物。
然后你的Global.asax:
Global.asax
AutoMapperWebConfiguration.Configure(); AutoMapperServicesConfiguration.Configure(); AutoMapperDomainConfiguration.Configure(); // etc
它有点像“文字接口”——无法强制执行,但您期望它,因此您可以在必要时进行编码(和重构)。
编辑:
只是想我会提到我现在使用 AutoMapper配置文件,所以上面的例子变成了:
public static class AutoMapperWebConfiguration { public static void Configure() { Mapper.Initialize(cfg => { cfg.AddProfile(new UserProfile()); cfg.AddProfile(new PostProfile()); }); } } public class UserProfile : Profile { protected override void Configure() { Mapper.CreateMap<User,UserViewModel>(); } }
更清洁/更健壮。