我在生成的数据访问层中使用AutoMapper。这很好。在另一层使用AutoMapper并且仍然存在Mapper.CreateMap<T1, T2>()
在DAL中创建的映射时,这有点令人困惑。我看到Mapper.Reset()
将删除这些,但我不必让其他层担心DAL。最佳做法是在DAL中的映射操作之前和之后放置Mapper.Reset()
吗?或者有没有办法给这些DAL映射一个非默认密钥让它们持久但不干扰AutoMapper在其他层中的使用?
注意:在DAL中使用AutoMapper有一些特定的选项,例如我的其他图层不应该使用的一些.ForMember(...)调用(没有Mapper.Reset()
他们会重用这些选项)
答案 0 :(得分:2)
AutoMapper作为单例/单实例。这真的很重要吗?
编辑:这可能对您有所帮助Using Profiles in Automapper to map the same types with different logic
如果您的其他图层对DAL类没有太多担心,那么他们无论如何都不会在DAL类的实例上调用Map。
如果你调用Reset(),那么你的DAL类需要在下次需要做一些映射时重申它们,这将增加额外的非常不必要的开销。
编辑:如果在每次DAL调用开始时调用Reset,那么您只能使用单线程数据访问策略。如果你在另一个DAL项目的映射中间调用Reset,那么你显然会破坏它 - 所以你必须锁定每个DAL方法。
这不是使用Automapper的方法,因此我倾向于查看这些配置文件,或者不使用它们。
另请注意:您是否可以发布示例代码,以了解有多少次映射的错误?两种类型之间是否存在不同的映射策略,具体取决于从DAL调用它们的位置?