ASP.NET Core中在模型构造函数内使用AutoMapper的实现问题
ASP.NET Core中在模型构造函数内使用AutoMapper的实现问题
嘿,我完全懂你现在的困扰——把旧ASP.NET MVC项目迁移到ASP.NET Core 6后,原来在ViewModel构造函数里用AutoMapper静态类的写法失效了,试了两种方式都报错,又不想大规模重构代码。咱们一步步来解决这个问题:
先看你第一个报错的写法:
_mapper.Map<HWAssetDetailsViewModel>(hw, this);
问题出在泛型参数的顺序上。AutoMapper的Map方法如果要映射到已存在的实例(也就是你的this),正确的泛型参数顺序是源类型在前,目标类型在后,或者你可以直接省略泛型让编译器自动推断类型。修正后的写法应该是:// 明确指定源和目标类型 _mapper.Map<HWAsset, HWAssetDetailsViewModel>(hw, this); // 或者更简洁的写法,编译器能自动识别源和目标类型 _mapper.Map(hw, this);你之前的写法把目标类型放在了第一个泛型参数的位置,AutoMapper找不到对应的映射配置,自然会抛出错误。
再说说第二个写法:
this = _mapper.Map<HWAssetDetailsViewModel>(hw);
这种思路从根本上就行不通。在C#的构造函数里,this代表当前正在创建的实例,它是只读的,你不能给它重新赋值,所以这种写法肯定会编译报错,直接放弃就好。
如果你后续有优化代码的计划,其实可以考虑把ViewModel的创建和映射逻辑抽离到专门的服务类中,这样构造函数的职责更单一,也更符合依赖注入的设计原则。不过当下用上面修正后的Map写法,就能快速恢复原来的功能,不用大规模重构现有代码。
备注:内容来源于stack exchange,提问作者Jarrett Mitchener
相关产品推荐
相关产品推荐

