所以问题很简单,但我无法找到解决问题的方法。
在我的解决方案中,我有一个DAL层(类库),一个DTO层(类库)和一个MVC项目。
这个想法是MVC应用程序从DTO层请求项目,而DTO层又从DAL层获取项目。很简单。
在DTO层中,我有一个存储库,其中包含用于管理它们的上下文。因此,MVC应用程序创建DTO上下文的实例,然后从适当的存储库中获取DTO实体。
现在出现问题。
在DTO图层中,我使用AutoMapper将底层实体映射到DTO,在MVC应用程序中,我计划再次使用它将DTO映射到ViewModel并返回。
因此,在DTO层的上下文的构造函数中,我调用静态RegisterMappings()
来注册底层实体和DTO之间的映射。到目前为止没问题。
然而,在MVC应用程序的Global.asax
中,当我尝试从ViewModel映射到MVC中的DTO时,我也调用RegisterMappings()
(从不同的类到DTO层中的类) app我得到Missing type map configuration or unsupported mapping
例外。
在查看AssertConfigurationIsValid()
抛出的异常时,我可以看到自动播放器仍在查看DAL和DTO层之间的映射,而不是预期的DTO和MVC应用层。
那么如何在同一个解决方案中的2个独立项目中使用automapper而不会出现这种情况"流血"映射的影响?
非常感谢任何想法。
答案 0 :(得分:1)
您可以通过在每个项目中存储AutoMapper配置,然后使用配置创建Mapper来保持映射分离:
// 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);