Automapper IMapper与依赖性解析器有关

bor*_*ris 5 .net c# dependency-injection automapper .net-core

我正在尝试使用automapper,并在尝试解析映射器对象时遇到一些问题.

这是代码

 public class MapAdapter : IMyMapper
 {
        private readonly AutoMapper.IMapper _mapper;

        public MapAdapter(AutoMapper.IMapper mapper)
        {
            _mapper = mapper;
        }

public TDest Map<TSource, TDest>(TSource source)
        {
            try
            {
                return _mapper.Map<TSource, TDest>(source);
            }
            catch (Exception exception)
            {
                throw;
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

这是例外

处理请求时发生未处理的异常.InvalidOperationException:尝试激活"Infrastructure.Mapper.Adapter.MapAdapter"时无法解析类型"AutoMapper.IMapper"的服务.

如果我从构造函数中删除AutoMapper.Mapper依赖项

public MapAdapter()
Run Code Online (Sandbox Code Playgroud)

一切都有效,除了Automapper _mapper字段,当然是null

这是DI配置,其中IMyMapper是我的界面,MapAdapter是IMyMapper的实现

_serviceCollection.AddTransient<IMyMapper, MapAdapter>();
Run Code Online (Sandbox Code Playgroud)

我有一个空的映射配置文件

  public class OrderDataMappingProfile : Profile
    {
        public OrderDataMappingProfile()
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

知道为什么失败了吗?

Mar*_*und 7

发生此错误的原因是您尚未注册应在服务集合上的 IMapper 接口上解析的映射器。

要解决此问题,请将映射配置文件添加到新的映射器配置中,然后从中创建一个映射器并将其绑定到集合。

var config = new AutoMapper.MapperConfiguration(cfg =>
{
    cfg.AddProfile(new OrderDataMappingProfile ());
});
var mapper = config.CreateMapper();
_serviceCollection.AddSingleton(mapper);
Run Code Online (Sandbox Code Playgroud)