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

ASP.NET MVC控制器中如何使用AutoMapper?Unity注入IMapper报错如何解决?

问题根源

当前报错为Ninject容器的绑定缺失提示,说明你项目实际用于接管ASP.NET MVC控制器实例化的依赖注入容器是Ninject,而非你手动创建的UnityContainer,你单独初始化的Unity实例没有实际生效,自然没办法注入IMapper到控制器。

解决方法

两种方案二选一即可,不要同时混用两个DI容器:

方案1:继续使用Ninject(无需引入Unity)

  • 删掉你现在在Application_Start里写的Unity相关代码
  • 找到项目中Ninject的服务注册代码(通常在NinjectWebCommon.cs的RegisterServices方法内),添加IMapper的绑定:
// 先初始化AutoMapper
MapperConfiguration config = AutoMapperConfig.Configure();
IMapper mapper = config.CreateMapper();
// 绑定IMapper单例
kernel.Bind<IMapper>().ToConstant(mapper);

方案2:改用Unity作为DI容器

  • 先卸载项目内所有Ninject相关的NuGet包和配置代码,避免容器冲突
  • 安装对应你项目MVC版本的NuGet包Unity.Mvc
  • 修改Application_Start内的代码,将Unity设置为MVC的依赖解析器:
MapperConfiguration config = AutoMapperConfig.Configure();
IMapper mapper = config.CreateMapper();
var container = new UnityContainer();
// 注册IMapper单例
container.RegisterInstance<IMapper>(mapper);
// 注册所有控制器
container.RegisterTypes(
    AllClasses.FromLoadedAssemblies().Where(t => typeof(Controller).IsAssignableFrom(t)),
    WithMappings.None
);
// 设置MVC依赖解析器
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
额外注意项
  • 你当前AutoMapperConfig.cs里的cfg.CreateMap<OrderDTO, Order>()代码末尾缺少分号,需要补上,否则会编译报错
  • 如果有多组实体映射,统一在AutoMapperConfig的Configure方法里添加即可,不需要重复初始化Mapper配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:30:01