Auto Mapper 5,没有 Ioc 和 Webforms
Auto Mapper 5, no Ioc and Webforms
现在 AutoMapper 正在废除静态 API 和在运行时更改映射的能力,我的 WebForms 应用程序在没有 IoC 管理器的情况下遇到了问题。
为了这个问题照原样我不能在这个应用程序中引入 IoC 管理器,虽然它 "good to do" 应用程序一直运行良好没有它很多年了,现在做不到。将来可能,但不是现在。
使用 AutoMapper,我以前做的是在每个 class 我实例化的方法中都有一个方法,该方法由构造函数自动调用。在那种方法中,我将拥有必要的:
Mapper.CreateMap<>()
来电。这样做有以下优点:
- 我只映射了每个请求所需的内容(并且根据程序流程,此映射列表会增长到我需要的内容)
- 所有类型都是 "local" - 这意味着我不必在解决方案中引用其他项目
我很高兴以这种方式处理每个请求的性能,而不是在 Application_Start() 中执行一次。
但是使用 AutoMapper 5...阅读 migrating from the static API 看来我现在必须:
- 在我有权访问我想要映射的所有类型的地方进行所有映射"somewhere"。所以无论我把它放在哪里,我都必须在我的解决方案中引用所有其他程序集?
- 将 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。
现在 AutoMapper 正在废除静态 API 和在运行时更改映射的能力,我的 WebForms 应用程序在没有 IoC 管理器的情况下遇到了问题。
为了这个问题照原样我不能在这个应用程序中引入 IoC 管理器,虽然它 "good to do" 应用程序一直运行良好没有它很多年了,现在做不到。将来可能,但不是现在。
使用 AutoMapper,我以前做的是在每个 class 我实例化的方法中都有一个方法,该方法由构造函数自动调用。在那种方法中,我将拥有必要的:
Mapper.CreateMap<>()
来电。这样做有以下优点:
- 我只映射了每个请求所需的内容(并且根据程序流程,此映射列表会增长到我需要的内容)
- 所有类型都是 "local" - 这意味着我不必在解决方案中引用其他项目
我很高兴以这种方式处理每个请求的性能,而不是在 Application_Start() 中执行一次。
但是使用 AutoMapper 5...阅读 migrating from the static API 看来我现在必须:
- 在我有权访问我想要映射的所有类型的地方进行所有映射"somewhere"。所以无论我把它放在哪里,我都必须在我的解决方案中引用所有其他程序集?
- 将 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。