AutoMapper在类库中

Mur*_*nze 6 automapper

我创建了一个类库来放置我的存储库,域模型和我的DTO.当用户调用ClienteRepository.GetById(1)作为例子时,它应该获取Client域模型并转换为ClientDTO以返回此示例:

public class ClientRepository{
     public ClientDTO GetById(int id){
          var clientDto = Mapper.Map<Client, ClientDTO>(_db.Client.Find(id));

          return clientDto;
     }

}
Run Code Online (Sandbox Code Playgroud)

问题是Mapper.Map不起作用,因为我没有创建map(Mapper.CreateMap<Client, ClientDTO>()).

我的问题:如果我没有global.asax来创建它,我怎么能在类库中做到这一点?

Cyb*_*axs 8

您不需要Global.asax用于Automapper.这是为Web项目执行映射init的更好方法.

只需将初始化代码放在静态构造函数中即可

 static MyStaticCtor()
    {
        //samples
        //Mapper.CreateMap<AccountViewModel, Account>();
        //Mapper.CreateMap<AccountSettingViewModel, AccountSetting>()

        Mapper.AssertConfigurationIsValid();
    }
Run Code Online (Sandbox Code Playgroud)

或者甚至,您可以在存储库的构造函数中执行此操作.


Mur*_*nze 8

我使用https://github.com/davidebbo/WebActivator解决了我的问题.只需创建一个新类并输入以下代码:

[assembly: WebActivator.PostApplicationStartMethod(typeof (MapsInit), "Activate")]
namespace Database
{
    public static class MapsInit
    {
        public static void Activate()
        {
            Mapper.CreateMap<ClienteDto, Cliente>();
            Mapper.CreateMap<Cliente, ClienteDto>();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)