【发布时间】:2017-06-17 06:29:00
【问题描述】:
所以问题很简单,但我就是找不到解决办法。
在我的解决方案中,我有一个 DAL 层(类库)、一个 DTO 层(类库)和一个 MVC 项目。
这个想法是 MVC 应用程序从 DTO 层请求项目,而 DTO 层又从 DAL 层获取项目。很简单。
在 DTO 层中,我有带有上下文的存储库来管理它们。因此,MVC 应用创建 DTO 上下文的实例,然后从相应的存储库中获取 DTO 实体。
现在解决问题。
在 DTO 层中,我使用 AutoMapper 将底层实体映射到 DTO,在 MVC 应用程序中,我计划再次使用它来将 DTO 映射到 ViewModel 并返回。
所以在 DTO 层上下文的构造函数中,我调用静态 RegisterMappings() 来注册底层实体和 DTO 之间的映射。到目前为止没有问题。
但是,在 MVC 应用程序的 Global.asax 中,我也调用 RegisterMappings()(从不同的类到 DTO 层中的类)但是当我尝试在 MVC 应用程序中从 ViewModel 映射到 DTO 时,我得到了Missing type map configuration or unsupported mapping 异常。
查看AssertConfigurationIsValid() 引发的异常时,我可以看到自动映射器仍在查看 DAL 和 DTO 层之间的映射,而不是预期的 DTO 和 MVC 应用程序层。
那么如何在同一个解决方案中的 2 个独立项目中使用 automapper 而不会获得映射的这种“出血”效果?
非常感谢任何想法。
【问题讨论】:
-
您使用的是 AutoMapper 5 或更高版本吗?然后我认为您可以单独存储每个配置,而不是使用静态的
Mapper调用,而是使用config.CreateMapper();为每个层创建一个映射器。 -
@stuartd 将其更改为答案小伙子。非常适合我。
标签: c# .net automapper