Auto Mapper 5,没有 Ioc 和 Webforms

Auto Mapper 5, no Ioc and Webforms

现在 AutoMapper 正在废除静态 API 和在运行时更改映射的能力,我的 WebForms 应用程序在没有 IoC 管理器的情况下遇到了问题。

为了这个问题照原样我不能在这个应用程序中引入 IoC 管理器,虽然它 "good to do" 应用程序一直运行良好没有它很多年了,现在做不到。将来可能,但不是现在。

使用 AutoMapper,我以前做的是在每个 class 我实例化的方法中都有一个方法,该方法由构造函数自动调用。在那种方法中,我将拥有必要的:

Mapper.CreateMap<>()

来电。这样做有以下优点:

我很高兴以这种方式处理每个请求的性能,而不是在 Application_Start() 中执行一次。

但是使用 AutoMapper 5...阅读 migrating from the static API 看来我现在必须:

  1. 在我有权访问我想要映射的所有类型的地方进行所有映射"somewhere"。所以无论我把它放在哪里,我都必须在我的解决方案中引用所有其他程序集?
  2. 将 MapperConfiguration() 实例存储在全局可访问的位置 - 让我们说是 HttpContext 或 HttpApplication 这样我就可以调用 MapperConfiguration.CreateMapper() 我现在需要确保我可以访问 HttpContext / HttpApplication 无处不在。这最终意味着不需要说 HttpContext 的项目现在需要访问它。

如果我在上面的 1. 和 2. 中的假设是正确的,那么我现在有一大堆紧密耦合的意大利面条代码。

所以我的问题是:

如何在没有 IoC 的情况下在解决方案中包含大量项目(因此也有许多类型)的 webforms 应用程序中优雅地使用 AutoMapper 5?

AutoMapper 并未废除静态 API。只是随意修改配置的部分。事实证明,在任何时候允许 Mapper.CreateMap 都会迫使我进行映射 sloooooooow。

那个 wiki 页面我忘记删除了。以下是实际指南:

https://github.com/AutoMapper/AutoMapper/wiki/Static-and-Instance-API

及5.0升级指南:

https://github.com/AutoMapper/AutoMapper/wiki/5.0-Upgrade-Guide

整个故事是"get rid of your Mapper.CreateMap calls sprinkled everywhere and put them in initialization"。您可以使用配置文件来帮助您。

但是 Mapper.CreateMap 散布在您的应用程序中总是很危险的。这意味着您不能使用 Mapper.AssertConfigurationIsValid,跳过它 非常 危险。如果您不能断言配置验证,则不应使用 AutoMapper。