我对AutoMapper比较陌生(但已经很喜欢)并且已经通过在Global.asax.cs中调用的静态方法使用Mapper.CreateMap< T,T>()来声明我的映射配置文件.
但是,在阅读了有关AutoMapper的更多信息之后,我还注意到了使用IoC容器(在我的情况下是StructureMap)和DI注入IMapperEngine接口的选项,这让我想知道除了那些之外我会得到什么(如果有的话)这些额外的好处在使用依赖注入(模拟,控制反转等)时获得.
例如,IMapperEngine的使用是否会延迟加载配置文件,直到它们被使用或我完全脱离标记?
解决方法:
I’m relatively new to AutoMapper (but love it already) and have been
declaring my mapping profiles by using Mapper.Map via a static method
called in Global.asax.cs.
我希望你不是那样做的. Mapper.Map方法用于执行对象实例之间的实际映射.您应该在Global.asax.cs中执行的操作是使用Mapper.CreateMap静态方法定义映射.
现在,就您对IMapperEngine接口的问题而言,最好始终使用代码中的抽象.在您的控制器操作中,您将不再使用Mapper.Map对静态方法调用进行硬编码,而是使用您可以在单元测试中模拟的抽象.没有其他显着的好处.
使用此界面不会推迟任何事情.如果您注入了具体的Mapper.Engine实例,那么在调用IMapperEngine.Map方法时所做的就是调用底层的Mapper.Engine.Map方法.