使用AutoMapper的IMappingEngine和DI有什么好处(如果有的话)

时间:2014-01-23 13:19:04

标签: c# asp.net-mvc automapper

我对AutoMapper比较陌生(但已经很喜欢)并且已经通过Mapper.CreateMap<T,T>()中调用的静态方法使用Global.asax.cs来声明我的映射配置文件。

然而,在阅读了有关AutoMapper的更多内容之后,我还注意到了使用IoC容器(在我的情况下是StructureMap)和DI注入IMapperEngine接口的选项,让我想知道什么(如果有的话)额外的好处除了那些在使用依赖注入(模拟,控制反转等)时获得的,这将呈现给我

例如,使用IMapperEngine是否会延迟加载配置文件,直到它们被使用或者我完全没有标记?

1 个答案:

答案 0 :(得分:4)

  

我对AutoMapper相对较新(但已经爱过它)并且一直都是   通过静态方法使用Mapper.Map声明我的映射配置文件   在Global.asax.cs中调用。

我希望你不是那样做的。 Mapper.Map方法用于执行对象实例之间的实际映射。您应该在Global.asax.cs中执行的操作是使用Mapper.CreateMap静态方法定义映射。

现在,关于IMapperEngine接口的问题,最好始终使用代码中的抽象。在您的控制器操作中,您将不再对Mapper.Map的静态方法调用进行硬编码,而是使用您可以在单元测试中模拟的抽象。没有其他显着的好处。

使用此界面不会推迟任何事情。如果您注入了具体的Mapper.Engine实例,那么当您调用IMapperEngine.Map方法时,您正在执行的操作就是调用基础Mapper.Engine.Map方法。