小编典典

在哪里放置 AutoMapper.CreateMaps?

all

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

我有一个 Web 层、服务层和一个数据层。每个都是自己的项目。我Ninject习惯于 DI 一切。我将AutoMapper在 Web
和服务层中使用。

那么你对AutoMapperCreateMap 的设置是什么?你把它放在哪里?你怎么称呼它?


阅读 72

收藏
2022-06-15

共1个答案

小编典典

没关系,只要是静态类即可。一切都与 约定 有关。

我们的 约定 是每个“层”(web、服务、数据)都有一个名为 的文件AutoMapperXConfiguration.cs,以及一个名为
的方法Configure(),其中X层。

然后该Configure()方法调用private每个区域的方法。

这是我们的 Web 层配置的示例:

public static class AutoMapperWebConfiguration
{
   public static void Configure()
   {
      ConfigureUserMapping();
      ConfigurePostMapping();
   }

   private static void ConfigureUserMapping()
   {
      Mapper.CreateMap<User,UserViewModel>();
   }

   // ... etc
}

我们为每个“聚合”(用户、帖子)创建一个方法,因此可以很好地分离事物。

然后你的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>();
    }
}

更清洁/更健壮。

2022-06-15