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)
知道为什么失败了吗?
发生此错误的原因是您尚未注册应在服务集合上的 IMapper 接口上解析的映射器。
要解决此问题,请将映射配置文件添加到新的映射器配置中,然后从中创建一个映射器并将其绑定到集合。
var config = new AutoMapper.MapperConfiguration(cfg =>
{
cfg.AddProfile(new OrderDataMappingProfile ());
});
var mapper = config.CreateMapper();
_serviceCollection.AddSingleton(mapper);
Run Code Online (Sandbox Code Playgroud)