使用映射库防止重构错误

Prevent refactoring mistakes with mapping libraries

给定

class A { string Name {get;set;} }
class B { string Name {get;set;} }

然后我使用 automapper 在 A 和 B 之间进行转换。后来,我将 A.Name 重命名为 A.MyName:

class A { string MyName {get;set;} }
class B { string Name {get;set;} }

由于隐式配置,这会破坏我的映射。隐式配置隐式地在 AB 之间创建关系。重构算法不识别这种关系从而产生中断。

什么映射器解决了这个问题?

使用接口 interface ABcommon { string Name {get;set;} } 并且 class A 和 B 实现它。重命名将起作用。

在 AutoMapper 中,假设您已经处理了映射中的所有属性(通过映射它们或显式忽略它们),Mapper.AssertConfigurationIsValid(); 是解决此问题的方法。

正如 documentation 所说:

Executing this code produces an AutoMapperConfigurationException, with a descriptive message. AutoMapper checks to make sure that every single Destination type member has a corresponding type member on the source type.

因此,在您重构 类 之后,将不会定义映射,测试将失败。

您可以将它放在单元测试中,如果没有任何测试,也可以放在启动代码中。