Auto Mapper 5,没有Ioc和Webforms

The*_*dge 0 c# asp.net webforms automapper automapper-5

既然AutoMapper正在废除静态API和在运行时更改映射的能力,那么在没有IoC管理器的情况下我的WebForms应用程序就会出现问题.

对于这个问题的缘故拿给出我不能提出一个IoC经理到这个应用程序,而这将是"好做",没有它的应用一直在努力罚款数年,并且它不能正确的进行此时此刻.在未来可能,但不是现在.

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

Mapper.CreateMap<>()
Run Code Online (Sandbox Code Playgroud)

调用.这具有以下优点:

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

我很高兴能够以这种方式满足每次执行操作的性能,而不是在Application_Start()中执行此操作.

但是使用AutoMapper 5 ... 从静态API读取迁移后,我现在必须:

  1. 做所有映射"某处",我可以访问我想要映射的所有类型.所以无论我把它放在哪里,我都必须在我的解决方案中引用其他所有组件?
  2. 具有存储的MapperConfiguration()实例某处全局访问-可以说,无论是HttpContext的或HttpApplication的,所以我可以调用MapperConfiguration.CreateMapper()我现在需要确保我有机会获得的HttpContext/HttpApplication的无处不在.这最终意味着不需要说HttpContext的项目现在需要访问它.

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

所以我的问题是:

如何在一个webforms应用程序中使用AutoMapper 5,在解决方案中有许多项目(因此有很多类型),没有优雅的IoC?

Jim*_*ard 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

整个故事是"摆脱你的Mapper.CreateMap调用到处洒满并将它们放在初始化中".您可以使用配置文件来帮助您.

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