You need to enable JavaScript to run this app. Automapper 10搭配Simple Injector v5配置报SimpleInjector.ActivationException
优惠活动
大模型
产品
解决方案
定价
更多

Automapper 10搭配Simple Injector v5配置报SimpleInjector.ActivationException

问题解决方案

该异常与AutoMapper官方文档无关,是SimpleInjector v5的默认配置限制,以及缺失对应类型注册导致的。

问题根源

你的GetMapper方法中调用了container.GetInstance<MapperProvider>()获取实例,但没有在容器中注册MapperProvider类型。SimpleInjector v5默认将ResolveUnregisteredConcreteTypes设置为false,禁止容器自动构造未注册的具体类型,因此抛出该激活异常。

修复方案

方案1:补注册MapperProvider(最小改动)

直接在你的Register方法中添加MapperProvider的注册即可,修改后的注册逻辑如下:

public static void Register(Container container)
{
    // 新增这行注册MapperProvider
    container.Register<MapperProvider>();
    container.RegisterSingleton(() => GetMapper(container));
    // 其他原有注册逻辑
    ...
}

方案2:移除多余的MapperProvider层(推荐)

你完全不需要额外封装MapperProvider类,可以直接在IMapper的注册委托中完成配置构建,避免多一层类型依赖:

public static void Register(Container container)
{
    container.RegisterSingleton<IMapper>(() => 
    {
        var config = new MapperConfigurationExpression();
        config.ConstructServicesUsing(container.GetInstance);
        config.AllowNullDestinationValues = true;
        config.AllowNullCollections = true;
        config.CreateMap<TeamModel, PoolTeamExtendedModel>();
        
        var mapperConfig = new MapperConfiguration(config);
        mapperConfig.AssertConfigurationIsValid();
        
        return new Mapper(mapperConfig, t => container.GetInstance(t));
    });
    // 其他原有注册逻辑
    ...
}

额外优化建议

MapperConfiguration是线程安全的重量级对象,建议全局只初始化一次,不要每次解析IMapper都重新构建配置,避免不必要的性能损耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 08:54:01