Automapper - 动态类型映射

Posted

技术标签:

【中文标题】Automapper - 动态类型映射【英文标题】:Automapper - Dynamic type mapping 【发布时间】:2017-12-23 04:06:06 【问题描述】:

当我尝试使用自动映射器映射运行时生成的类时。

AssemblyName asmName = new AssemblyName(string.Format("0_1", "tmpAsm", Guid.NewGuid().ToString("N")));
AssemblyBuilder asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = asmBuilder.DefineDynamicModule("core");
TypeBuilder typeBuilder = GetTempModule().DefineType("MyDynamicClass", TypeAttributes.Public);
Type proxy = typeBuilder.CreateType();
var mc = new MapperConfiguration(cfg =>

    cfg.CreateMap(proxy, typeof(MyViewModel));
);

var mapper = mc.CreateMapper();
mapper.Map<MyViewModel>(Activator.CreateInstance(proxy));

我收到以下错误:

AutoMapper.AutoMapperMappingException : 缺少类型映射配置 或不受支持的映射。

尽管出现了错误消息,但正如您所见,映射已被清除。有什么建议吗?

【问题讨论】:

异常消息中没有其他内容(通常是说它缺少哪个映射,基本上在哪些类之间) 【参考方案1】:

尝试使用:

TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicClass", TypeAttributes.Public);

代替:

TypeBuilder typeBuilder = GetTempModule().DefineType("MyDynamicClass", TypeAttributes.Public);

另外,检查您正在使用的 AutoMapper 版本:我在 6.1.1.0 上测试过

【讨论】:

以上是关于Automapper - 动态类型映射的主要内容,如果未能解决你的问题,请参考以下文章

AutoMapper 和 .NET Core:缺少类型映射配置或不支持的映射

Automapper:缺少类型映射配置 .NET Web API

Automapper:不同类型之间的映射

如何在 AutoMapper 中映射通用结构类型

AutoMapper 可以在值类型(枚举)和引用类型之间进行映射吗? (细绳)

AutoMapper总结