【问题标题】:More than 1 AutoMapper Configuration in multi-project solution多项目解决方案中的 1 个以上 AutoMapper 配置
【发布时间】: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


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多