Automapper错误说mapper未初始化

我正在使用Automapper 5.2。 我用这个链接作为基础。 我将逐步描述设置我所经历的Automapper的过程。

首先我按照指示将Automapper添加到Project.json:

PM> Install-Package AutoMapper 

其次,我创建了一个文件夹来保存与映射相关的所有文件“Mappings”

第三,我在自己的mappings文件夹文件中设置了Automapper的配置:

 public class AutoMapperConfiguration { public MapperConfiguration Configure() { var config = new MapperConfiguration(cfg => { cfg.AddProfile(); cfg.AddProfile(); cfg.AddProfile(); }); return config; } } 

Forth还在mappings文件夹中的自己的文件中,我设置了映射配置文件,如下所示:

 public class DomainToViewModelMappingProfile : Profile { public DomainToViewModelMappingProfile() { CreateMap() .ForMember(vm => vm.Creator, map => map.MapFrom(s => s.Creator.Username)) .ForMember(vm => vm.Jobs, map => map.MapFrom(s => s.Jobs.Select(a => a.ClientId))); } } 

第五 ,我在mappings文件夹中添加了一个扩展方法作为自己的文件…这在startup.cs中使用了下一个:

 public static class CustomMvcServiceCollectionExtensions { public static void AddAutoMapper(this IServiceCollection services) { if (services == null) { throw new ArgumentNullException(nameof(services)); } var config = new AutoMapperConfiguration().Configure(); services.AddSingleton(sp => config.CreateMapper()); } } 

第六,我将此行添加到Startup.cs中的ConfigureServices方法中

  // Automapper Configuration services.AddAutoMapper(); 

最后我在控制器中使用它来转换集合……

  IEnumerable _clientVM = Mapper.Map<IEnumerable, IEnumerable>(_clients); 

根据我前面提到的问题,我认为我已经设置了所有内容,所以我可以使用它但是我在控制器上面的行上出现错误…

“Mapper未初始化。使用适当的配置调用Initialize。如果您尝试通过容器或其他方式使用映射器实例,请确保您没有对静态Mapper.Map方法的任何调用,并且如果您使用的是ProjectTo或UseAsDataSource扩展方法,确保传入适当的IConfigurationProvider实例。“

我错过了什么..这是设置Automapper的正确方法吗? 我怀疑我在这里错过了一步……任何帮助都非常感激。

AutoMapper有两个用法:dependency injection和旧的静态以实现向后兼容。 您正在为dependency injection配置它,但随后尝试使用静态。 那是你的问题。 你只需要选择一种方法或另一种方法。

如果你想通过dependency injection来实现它,你的控制器应该将mapper作为构造函数参数保存到成员,然后你需要使用该成员来进行映射:

 public class FooController : Controller { private readonly IMapper mapper; public FooController(IMapper mapper) { this.mapper = mapper; } 

然后:

 IEnumerable _clientVM = mapper.Map, IEnumerable>(_clients); 

对于静态方法,您需要使用您的配置初始化AutoMapper:

 public MapperConfiguration Configure() { AutoMapper.Mapper.Initialize(cfg => { cfg.AddProfile(); cfg.AddProfile(); cfg.AddProfile(); }); } 

然后,您只需要在Startup.cs中调用此方法; 你将不再注册单身人士。

我在使用AutoMapper.Extensions.Microsfot.DependencyInjection版本5.0.1和AutoMapper 7.0.1时收到此错误。 使用AutoMapper 6.1.1安装3.2.0解决了这个问题,让我通常调用_mapper.Map。 我不知道为什么导致我没有调用静态Mapper类而且我没有使用ProjectTo或UseAsDataSource。