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

使用Autofac集成AutoMapper时遭遇ComponentNotRegisteredException异常

解决Autofac注册AutoMapper.IMapper的错误

错误原因

你调用CreateMapper()无参方法时,AutoMapper会尝试自行构建内部服务提供器,无法和Autofac的依赖注入体系兼容,导致抛出ComponentNotRegisteredException: 请求的服务'System.Object'未注册错误。同时你的注册代码未明确指定Autofac上下文类型,导致无法调用Resolve方法。

正确注册步骤

1. 注册MapperConfiguration为单例

MapperConfiguration是重量级对象,需全局单例复用:

' 注册MapperConfiguration(单例)
Builder.Register(Function(context As IComponentContext)
                     Return New MapperConfiguration(Sub(config)
                                                      config.AddProfile(Of MappingProfile)()
                                                    End Sub)
                 End Function).SingleInstance()

2. 注册IMapper并关联Autofac上下文

明确指定上下文类型为IComponentContext,让AutoMapper通过Autofac解析依赖:

' 注册IMapper(每个生命周期域实例一个)
Builder.Register(Function(context As IComponentContext)
                     Dim config = context.Resolve(Of MapperConfiguration)()
                     ' 传入Autofac的解析逻辑给AutoMapper
                     Return config.CreateMapper(Function(serviceType) context.Resolve(serviceType))
                 End Function).As(Of IMapper)().InstancePerLifetimeScope()

验证解析

你的原有解析代码无需修改,保持即可:

Using oScope As ILifetimeScope = Me.Container.BeginLifetimeScope
  oMapper = oScope.Resolve(Of IMapper)
End Using

关键说明

  • 必须明确注册委托的参数类型为IComponentContext,避免参数被隐式转为System.Object,才能正常调用Resolve方法。
  • MapperConfiguration单例注册可避免重复初始化映射配置,提升性能。
  • 通过config.CreateMapper(Function(serviceType) context.Resolve(serviceType))让AutoMapper复用Autofac的依赖注入容器,解决服务找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:52:52