C# 自动映射器5,无Ioc和Webforms

C# 自动映射器5,无Ioc和Webforms,c#,asp.net,webforms,automapper,automapper-5,C#,Asp.net,Webforms,Automapper,Automapper 5,现在AutoMapper取消了静态API和在运行时更改映射的功能,我的WebForms应用程序在没有IoC管理器的情况下遇到了一个问题 出于这个问题的考虑,我不能在这个应用程序中引入一位国际奥委会经理,虽然“做得好”,但多年来没有它,这个应用程序一直运行良好,目前无法正确完成。也许在将来,但不是现在 使用AutoMapper,我以前做的是在我实例化的每个类中都有一个由构造函数自动调用的方法。在这种方法中,我将有必要: Mapper.CreateMap<>() Mapper.Crea

现在AutoMapper取消了静态API和在运行时更改映射的功能,我的WebForms应用程序在没有IoC管理器的情况下遇到了一个问题

出于这个问题的考虑,我不能在这个应用程序中引入一位国际奥委会经理,虽然“做得好”,但多年来没有它,这个应用程序一直运行良好,目前无法正确完成。也许在将来,但不是现在

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

Mapper.CreateMap<>()
Mapper.CreateMap()
电话。这有以下优点:

  • 我只映射了每个请求所需的内容(根据程序流,映射列表将增长到我所需的内容)
  • 所有类型都是“本地的”——这意味着我不必参考解决方案中的其他项目
我很高兴在应用程序_Start()中以这种方式处理每一个请求,而不是只执行一次

但是使用AutoMapper 5。。。在阅读之后,我现在似乎必须:

  • 在“某处”进行所有映射,我可以访问我想要映射的所有类型。所以,无论我把它放在哪里,我都必须引用我的解决方案中的所有其他程序集
  • 将MapperConfiguration()实例存储在全局可访问的位置后,可以说是HttpContext或HttpApplication,这样我就可以调用MapperConfiguration.CreateMapper(),现在我需要确保我可以访问 HttpContext/HttpApplication无处不在。这最终意味着不需要HttpContext的项目现在需要访问它
  • 如果我的假设在1&2.以上是正确的,我现在有一大堆紧密耦合的意大利面条代码

    所以我的问题是:


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

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

    我忘了删除那个维基页面。以下是实际指导:

    和5.0升级指南:

    总体情况是“摆脱随处可见的Mapper.CreateMap调用,并将它们放入初始化”。您可以使用配置文件来帮助您


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

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

    我忘了删除那个维基页面。以下是实际指导:

    和5.0升级指南:

    总体情况是“摆脱随处可见的Mapper.CreateMap调用,并将它们放入初始化”。您可以使用配置文件来帮助您


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

    我理解更改的必要性,并接受这些更改以提高速度、增强稳定性等。。但是,在我的情况下(没有IoC),将“将它们放入初始化”意味着将其放入Global.asax-Application\u启动并引用主web应用程序中的每个程序集?我看没有别的办法了。此外,我现在必须有一个全球的,我可以访问在每一个其他大会?我只是想确保我没有错过一些非常明显的东西。很明显,在这样做的过程中,我会产生一些非常糟糕的代码味道。是的,尽管我不认为引用主web应用程序中的每个程序集有什么问题。除非您正在构建某种可插拔的门户,否则这应该不会是一个问题。然而,大多数人在其子程序集中创建概要文件类,并将配置文件放在其中。然后,Mapper.Initialize调用将只添加所有这些配置文件,可以手动添加,也可以通过反射来扫描所有配置文件。另外,我不确定您指的是什么代码?这几乎是配置AutoMapper.Hmmm的推荐方法,DDD与项目结构无关。这听起来像是一个复杂的体系结构,包含所有这些项目和规则。完全脱离主题,但你们真的应该看看我的视频在固体结构的切片,而不是层。它大大减少了分层积垢。祝你好运@边缘:正如所解释的,从web应用程序引用程序集是很自然的。停止试图阻止这种情况发生。我理解改变的必要性,并接受它们以提高速度、增强稳定性等。。但是,在我的情况下(没有IoC),将“将它们放入初始化”意味着将其放入Global.asax-Application\u启动并引用主web应用程序中的每个程序集?我看没有别的办法了。此外,我现在必须有一个全球的,我可以访问在每一个其他大会?我只是想确保我没有错过一些非常明显的东西。很明显,在这样做的过程中,我会产生一些非常糟糕的代码味道。是的,尽管我不认为引用主web应用程序中的每个程序集有什么问题。除非您正在构建某种可插拔的门户,否则这应该不会是一个问题。然而,大多数人在其子程序集中创建概要文件类,并将配置文件放在其中。然后,Mapper.Initialize调用将只添加所有这些配置文件,或者