2017-01-31 29 views
1

所以这个问题很简单,但我只是看不到解决方案。多项目解决方案中的1个以上的AutoMapper配置

在我的解决方案我有一个DAL层(类库),一个DTO层(类库)和MVC项目。

的想法是,在MVC应用程序从DTO层,进而从DAL层变项要求的项目。够简单。

在DTO层我有一个情境仓库来管理它们。因此,MVC应用程序创建了DTO上下文的一个实例,然后从相应的存储库中获取DTO实体。

现在的问题。

在我使用AutoMapper到底层实体映射到DTO的,而在MVC应用程序我计划再次使用到的DTO到的ViewModels和背部映射DTO层。

因此,在DTO层的上下文的构造函数中,我调用静态RegisterMappings()来注册底层实体和DTO之间的映射。目前没有问题。

但是在MVC应用程序的Global.asax我也呼吁RegisterMappings()(来自不同类的人在DTO层),然而当我尝试从MVC应用程序,我得到了Missing type map configuration or unsupported mapping异常的视图模型到DTO映射。

查看AssertConfigurationIsValid()引发的异常,我可以看到automapper仍在查看DAL和DTO层之间的映射,而不是预期的DTO和MVC应用层。

那么,如何在2个独立的项目中使用automapper没有得到映射的这种“流血”效果相同的解决方案中?

任何想法非常赞赏。

+1

您是否在使用AutoMapper 5或更高版本?然后我认为你可以单独存储每个配置,而不是使用静态的Mapper调用,使用'config.CreateMapper();'为每个图层创建一个映射器。 – stuartd

+0

@stuartd改变一个答案小伙子。为我完美工作。 –

+0

完成,谢谢... – stuartd

回答

1

可以保持映射,分离通过存储在每个项目AutoMapper配置,然后使用该配置来创建映射:

// DTO project 
MapperConfiguration dtoConfig; 

dtoConfig = new MapperConfiguration(cfg => { 
    cfg.CreateMap<Foo, Bar>(); 
    cfg.AddProfile<DtoProfile>(); 
}); 

// MVC project 
MapperConfiguration mvcConfig; 

mvcConfig = new MapperConfiguration(cfg => { 
    cfg.CreateMap<Foo, Bar>(); 
    cfg.AddProfile<MvcProfile>(); 
}); 

然后,当你要映射类,使用适当的配置,以创建映射器:

var mapper = mvcConfig.CreateMapper(); 
mapper.Map<Foo, Bar>(foo); 
相关问题