Auto Mapper 5,没有Ioc和Webforms

时间:2016-07-27 12:25:18

标签: c# asp.net webforms automapper automapper-5

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

为了这个问题采取给定的我不能在这个应用程序中引入IoC管理器,虽然这样做会很好。"该应用程序在没有它的情况下已经工作了很多年,而且目前无法正常完成。未来可能,但不是现在。

使用AutoMapper之前我曾经做过的事情是在我实例化的每个类中有一个方法,它由构造函数自动调用。在那种方法中,我将有必要:

Mapper.CreateMap<>()

呼叫。这具有以下优点:

  • 我只根据请求映射了我需要的内容(根据程序流程,这个映射列表会增长到我需要的位置)
  • 所有类型都是&#34;本地&#34; - 这意味着我不必在解决方案中引用其他项目

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

然而,使用AutoMapper 5 ...阅读migrating from the static API后,我现在必须:

  1. 做所有映射&#34;某处&#34;我可以访问我要映射的所有类型。所以无论我把它放在哪里,我都必须在我的解决方案中引用其他所有组件?
  2. 将MapperConfiguration()实例存储在全局可访问的地方 - 让我们说HttpContext或HttpApplication所以我可以调用MapperConfiguration.CreateMapper()我现在需要确保我有权访问 HttpContext / HttpApplication 无处不在。这最终意味着不需要说HttpContext的项目现在需要访问它。
  3. 如果我的假设在1.&amp; 2.以上是正确的我现在有一大堆紧密耦合的意大利面条代码。

    所以我的问题是:

    如何在解决方案中使用大量项目(因此包含多种类型)的Webforms应用程序中使用AutoMapper 5,而不优雅地使用IoC?

1 个答案:

答案 0 :(得分:5)

AutoMapper并没有取消静态API。只是随意修改配置的部分。事实证明,允许Mapper.CreateMap随时迫使我进行映射。

那个我忘了删除的wiki页面。这是实际指导:

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

5.0升级指南:

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

整个故事是&#34;摆脱遍布各处的Mapper.CreateMap调用并将它们置于初始化状态&#34;。您可以使用配置文件来帮助您。

但Mapper.CreateMap遍布整个应用程序总是危险的。这意味着您无法使用Mapper.AssertConfigurationIsValid,这是非常危险的跳过。如果您无法断言配置验证,则不应使用AutoMapper。