我创建了一个类库来放置我的存储库,域模型和我的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来创建它,我怎么能在类库中执行此操作?
答案 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>();
}
}
}