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

在Asp.net Core 2中添加AutoMapper遇歧义错误,求解决方案

ASP.NET Core 2中AutoMapper配置的歧义错误解决办法

错误原因分析

你碰到的CS0121歧义错误,核心原因是AutoMapper适配ASP.NET Core 2的版本对AddAutoMapper扩展方法做了重载更新:

  • 在ASP.NET Core 1.1搭配的AutoMapper版本里,AddAutoMapper()是无参方法,框架会自动扫描当前程序集查找映射配置
  • 但到了适配ASP.NET Core 2的AutoMapper(大致是6.x及以上版本),AddAutoMapper新增了两个关键重载:
    • 一个接收params Assembly[]参数,用于指定要扫描的程序集
    • 另一个接收params Type[]参数,用于指定包含映射配置的具体类型
  • 当你调用无参的services.AddAutoMapper()时,编译器无法判断你要调用哪个重载——因为数组类型的参数允许为空,两个重载都符合无参调用的语法,因此抛出了歧义错误。

ASP.NET Core 2中AddAutoMapper的正确传参方式

根据你的实际场景,有两种常用的正确调用方式:

方式1:指定要扫描的程序集

如果你的映射配置(比如继承自Profile的子类)都在当前项目程序集里,直接传入当前程序集即可:

// 在Startup.cs的ConfigureServices方法中
services.AddAutoMapper(typeof(Startup).Assembly);

AutoMapper会自动扫描这个程序集里所有继承自Profile的映射配置类。

方式2:直接指定映射配置类

如果你想精准指定某几个映射配置类,直接传入这些类的Type即可:

// 假设你有一个继承自Profile的映射配置类叫UserProfile
services.AddAutoMapper(typeof(UserProfile));

这种方式适合项目拆分较细、不想扫描整个程序集的场景。

另外要注意:在ASP.NET Core 2对应的AutoMapper版本中,不再推荐直接使用静态的AutoMapper.Mapper.Map,更建议通过依赖注入获取IMapper实例来使用,比如在控制器中注入:

public class UserController : Controller
{
    private readonly IMapper _mapper;

    public UserController(IMapper mapper)
    {
        _mapper = mapper;
    }

    public IActionResult Index()
    {
        var user = new User();
        var userDto = _mapper.Map<UserDto>(user);
        return View(userDto);
    }
}

内容的提问来源于stack exchange,提问作者topcool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:26:18