AutoMapper映射验证工具的使用指南

.NET开发中,对象映射是一个常见的需求,而AutoMapper是一个流行的库,用于简化对象之间的映射过程。然而,AutoMapper并不是万能的,有时在运行时可能会发现自己遗漏了一些属性映射。为了解决这个问题,可以使用AutoMapperPostBuilder这个工具,它能够在编译后立即提供反馈,告诉映射配置是否正确。

基础概念

AutoMapper并不是一个完美的解决方案。可以找到许多关于为什么不应该使用AutoMapper的好文章或讨论。即使AutoMapper的作者Jimmy Bogard也描述了一些可能不适用AutoMapper的场景。尽管如此,在所遇到的依赖于AutoMapper的项目中,通常会实现AutoMapperPostBuilder。这个工具使用AutoMapper内置的Mapper.AssertConfigurationIsValid()功能,在编译后直接调用。通过在项目中使用AutoMapper的后编译事件调用Invoke,它将帮助了解在映射中遗漏了哪些属性。

开始使用

要开始使用AutoMapperPostBuilder,需要引用AutoMapperPostBuilder项目,并设置引用选项为'Copy Local = True'。这将确保AutoMapperPostBuilder.exe被复制到项目输出文件夹中。在项目属性中,填写'Post-build event command line'字段:

$(TargetDir)AutoMapperPostBuilder.exe $(TargetPath)AutoMapperPostBuilder_Sample.MappingClass Invoke

在这个例子中,要调用的类是AutoMapperPostBuilder_Sample.MappingClass。只需将该名称替换为想要调用的类名。

AutoMapperPostBuilder.exe接受以下参数:

  • 项目输出的完整路径(例如:bin/debug/YourAssembly.dll
  • 映射类的命名空间和类名
  • Invoke命令

想要调用的类需要有以下方法:

public static void Invoke() {}

在(静态)构造函数中,可能已经写好了标准的映射,需要以以下方式结束:

Mapper.AssertConfigurationIsValid();

一个简单的映射类可能看起来像这样:

using AutoMapper; namespace AutoMapperPostBuilder_Sample { static class MappingClass { static MappingClass() { Mapper.Initialize(cfg => { cfg.CreateMap<sampleclassb_1, sampleclassa_1>() .ForMember(dest => dest.InnerProp1, opt => opt.MapFrom(src => src.InnerProp10)) .ForMember(dest => dest.InnerProp2, opt => opt.MapFrom(src => src.InnerProp20)); }); Mapper.AssertConfigurationIsValid(); } public static void Invoke() {} } }

结果

现在,如果编译项目并且构建成功(最初),后编译事件将触发AutoMapperPostBuilder.exe,它将寻找指定的类并调用它。这将构建映射并调用AssertConfigurationIsValid。如果映射有错误,它将在构建输出窗口中显示出来。

更好的是,后编译事件将注意到AutoMapperPostBuilder.exe以代码1退出。这将导致构建失败。这正是想要的,因为不想等到启动应用程序并最终运行到那一行代码时才遇到异常。

工作原理

AutoMapperPostBuilder调用静态方法Invoke()。这反过来会调用静态构造函数。因为映射是在构造函数中编写或调用的,能够利用Mapper.AssertConfigurationIsValid()。AutoMapper本身会抛出有关无效映射的详细异常。这些异常被AutoMapperPostBuilder.exe捕获并写入控制台。这些控制台输出将显示在Visual Studio构建输出中,或者使用的任何IDE中。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485