AutoMapper 5.2如何配置

Sea*_*kit 12 c# automapper

配置AutoMapper以供全局使用的正确方法是什么.

我想设置一次,然后使用虽然应用程序.

我有一种强烈的感觉,这是错误的.事实上我知道这是错误的,因为这会调用一个新实例.我想要一个全局配置然后你怎么称呼它.找不到一个好例子!

这就是我所拥有的:但它不是我想要的

public static class AutoMapperConfig
{
      public static IMapper GetMapper()
      {
          var config = new MapperConfiguration(cfg => {
              cfg.CreateMap<R_Logo, LogoDto>();
              //lots more maps...?
          });

          IMapper mapper = config.CreateMapper();
          return mapper;
      }
}
Run Code Online (Sandbox Code Playgroud)

然后用法:

  var imapper = AutoMapperConfig.GetMapper();
  var dest = imapper.Map<R_Logo, LogoDto>(logo);
Run Code Online (Sandbox Code Playgroud)

UPDATE基于:pinkfloydx33

调用一次,然后配置完成.

public static class AutoMapperConfig
{
   public static void RegisterMappings()
   {
        AutoMapper.Mapper.Initialize(cfg => {
           cfg.CreateMap<R_Logo, LogoDto>();
            /* etc */
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

Ahm*_*mar 15

以下是在asp.net core mvc中配置automapper的步骤.

1.创建从中扩展的映射配置文件类Profile

 public class ClientMappingProfile : Profile
 {
     public ClientMappingProfile ()
     {
         CreateMap<R_Logo, LogoDto>().ReverseMap();
     }
 }
Run Code Online (Sandbox Code Playgroud)

2.创建AutoMapper配置类并在此处添加映射配置文件类.

public class AutoMapperConfiguration
{
   public MapperConfiguration Configure()
   {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.AddProfile<ClientMappingProfile>();
        });
        return config;
    }
}
Run Code Online (Sandbox Code Playgroud)

3.我们如何使用它.

       var config = new AutoMapperConfiguration().Configure();
       var iMapper = config.CreateMapper();

       var dest = iMapper.Map<R_Logo, LogoDto>(logo);
Run Code Online (Sandbox Code Playgroud)


Viv*_*ngh 10

在StartupConfig或StartUp文件中设置它.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
       // Web API configuration and services    
        .....

        MappingDTOModelToModel.Configure();
    }
}
Run Code Online (Sandbox Code Playgroud)

映射的配置,

public static class MappingDTOModelToModel
{       
     private static void Configure()
     {
         Mapper.Initialize(cfg =>
         {
             cfg.CreateMap<R_Logo, LogoDto>()
                 .ForMember(x => x.ID,
                            m => m.MapFrom(a => a.ID))
                 .ForMember(x => x.FirstName,
                            m => m.MapFrom(a => a.FirstName)).ReverseMap();                    
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

用方法调用它,

public class MyService
{
    public void MyMethod(var model)
    {
        var myModel = Mapper.Map<LogoDto, R_Logo>(model);  
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助,


pin*_*x33 6

您可以使用此处概述的静态映射器api .

例如,在应用程序的某个地方,可能在启动期间,您将使用以下内容配置静态(全局)映射器:

AutoMapper.Mapper.Initialize(cfg => { 
   cfg.CreateMap<Type1, Type2>(); 
   /* etc */
});
Run Code Online (Sandbox Code Playgroud)

然后,只要您需要使用"全局"配置的映射器,就可以通过静态Mapper属性(这是一个IMapper)访问它:

Type1 objectOfType1 = new Type1();
var result = AutoMapper.Mapper.Map<Type2>(objectOfType1);
Run Code Online (Sandbox Code Playgroud)

然后,您可以为应用程序持续时间内提供的所有类型/配置/配置文件配置一个映射器,而无需配置单个映射器实例.

简而言之,您可以配置一次(可能在应用程序启动时).然后,静态映射器实例(the IMapper)可通过访问它在整个应用程序中的任何位置使用AutoMapper.Mapper.

通过此静态属性进行访问是您在评论中称为"全局"的内容.AutoMapper.Mapper.Map(...)只要您Initialize先拨打一次,就可以使用它.

请注意,如果Initialize在静态实例上多次调用,则每个后续调用都会覆盖现有配置.

警告 在以前版本的AutoMapper中,静态映射器已被删除.它后来被添加回来,我不知道他们是否保证它将保留在未来的版本中.建议使用您自己配置的映射器实例.如果需要,可以将它存储在某个静态属性中.否则,您可以查看配置文件等,以便轻松配置您的映射器,以便拥有自己的实例不一定是"麻烦".