依赖注入下AutoMapper报错:缺少类型映射配置或不支持映射
问题解决:AutoMapper依赖注入时提示缺少类型映射配置
执行代码var flattenedIncident = _mapper.Map<FlattenedIncident>(incident);时触发异常:
AutoMapper.AutoMapperMappingException: 'Missing type map configuration or unsupported mapping.'
原无依赖注入的控制台项目运行正常,重构为依赖注入方式后报错。
问题根源
依赖注入中使用services.AddAutoMapper(typeof(Program).Assembly)时,仅扫描了Program所在程序集,但你的IncidentProfile映射配置类不在这个程序集内,导致AutoMapper无法加载到映射规则。而手动创建Mapper时,你明确调用AutoMapperConfig.ConfigureMappings()加载了IncidentProfile,所以能正常运行。
解决方案
方案1:修正AutoMapper的程序集扫描范围
将AddAutoMapper的参数改为包含IncidentProfile所在的程序集,确保AutoMapper能扫描到你的映射配置类:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { // 扫描IncidentProfile所在的程序集 services.AddAutoMapper(typeof(IncidentProfile).Assembly); services.AddScoped<IMyService, MyService>(); services.AddScoped<IConsoleApp, ConsoleApp>(); });
若需扫描多个程序集,可传入多个类型:
services.AddAutoMapper(typeof(Program).Assembly, typeof(IncidentProfile).Assembly);
方案2:直接复用现有AutoMapperConfig配置
如果想继续使用已有的AutoMapperConfig静态类配置,可替换AddAutoMapper的注册逻辑,手动注册配置好的IMapper:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { var mapperConfig = AutoMapperConfig.ConfigureMappings(); // 提前验证配置是否正确(可选但推荐) mapperConfig.AssertConfigurationIsValid(); // 注册IMapper实例 services.AddSingleton<IMapper>(mapperConfig.CreateMapper()); services.AddScoped<IMyService, MyService>(); services.AddScoped<IConsoleApp, ConsoleApp>(); });
验证建议
无论使用哪种方案,都可以在启动时添加mapperConfig.AssertConfigurationIsValid();提前验证映射配置的正确性,避免运行时才发现问题。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

