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。
- 如何让AutoMapper处理自定义命名约定?
- 每个类库的dependency injection容器
- 在自定义映射中调用IMappingEngine.Map
- 在IQueryable上调用ProjectTo ()时,AutoMapper抛出StackOverflowException
- 哪个更快:Automapper,Valuinjector还是手动映射? 每个人的速度到什么程度?
- AutoMapper:PreserveReferences和MaxDepth有什么区别?
- 使用AutoMapper自定义映射
- Dictionary 使用Automapper映射到对象
- 使用CreateMap的实例版本和使用WCF服务映射?