AutoMapperUsingWrongConstructor今天我使用AutoMapperv1.1升级了一个功能齐全的应用程序,现在使用AutoMapperv2.1,我遇到了以前从未遇到的问题中得到的东西。这是我的代码从Dto映射回域对象的示例publicclassTypeOne{publicTypeOne(){}publicTypeOne(TypeTwotwo){//throwexiftwoisnull}publicTypeOne(TypeTwotwo,TypeThreethree){//如果两个或三个为null则抛出ex}publicTypeTwoTwo{get;私有集;}publicTypeThree三{get;私有集;}}公共类TypeOneDto{publicTypeOneDto(){}publicTypeTwoDtoTwo{get;设置;}publicTypeThreeDtoThree{get;设置;}}...Mapper.CreateMap();映射器.CreateMap();映射器.CreateMap();vartypeOne=Mapper.Map(typeOneDto);但是,我在v2.1中遇到的第一个问题是,当其中一个参数为null时,AutoMapper会尝试使用带有2个参数的构造函数,而应该使用1个参数的构造函数。然后我尝试使用Mapper.CreateMap().ConstructUsing(x=>newTypeOne());但我不断收到无法解决的“模糊调用”错误。然后我尝试了Mapper.CreateMap().ConvertUsing(x=>newTypeOne());并且使用无参数构造函数成功创建了TypeOne对象,但之后我无法设置私有setter属性。我在AutoMapper网站上寻求帮助并下载了源代码以获得良好的外观,但获得的文档很少,而且ConstructUsing的单元测试也不多。有什么明显的我遗漏的东西我应该用v2.1改变吗?我很惊讶它与v1.1相比变化如此之大。您只需要将显式转换添加到Func这是代码:Mapper.CreateMap().ConstructUsing((Func)(r=>newTypeOne()));当前版本的AutoMapper是这样工作的:构造函数被排序destTypeInfo.GetConstructors().OrderByDescending(ci=>ci.GetParameters().Length);获取参数与源属性匹配的第一个构造函数(不检查空值)。在您的情况下,它是一个带有两个参数的构造函数。以上就是C#学习教程:AutoMapper使用错误的构造函数全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
