6

我创建了一个类库来放置我的存储库、域模型和我的 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 来创建它,我该如何在类库中执行此操作?

4

2 回答 2

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>();
        }
    }
}
于 2012-12-09T18:40:25.433 回答
8

Automapper 不需要 Global.asax。这只是为 Web 项目进行映射初始化的更好方法。

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

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

        Mapper.AssertConfigurationIsValid();
    }

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

于 2012-09-26T14:08:21.843 回答