You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:37:41