AutoMapper在类库中

时间:2012-09-26 14:01:41

标签: 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;
     }

}

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

我的问题:如果我没有global.asax来创建它,我怎么能在类库中执行此操作?

2 个答案:

答案 0 :(得分:8)

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

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

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

        Mapper.AssertConfigurationIsValid();
    }

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

答案 1 :(得分: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>();
        }
    }
}