映射器未初始化。使用适当的配置调用初始化

时间:2018-08-01 04:41:21

标签: c# asp.net-core automapper

将AutoMaper用于Netcore 2.1 Projet时出现错误

  

映射器未初始化。用适当的配置调用初始化。如果您尝试通过容器或其他方式使用mapper实例,请确保您没有对静态Mapper.Map方法的任何调用,如果您使用ProjectTo或UseAsDataSource扩展方法,请确保,请确保您传入适当的IConfigurationProvider实例。   Mapper.cs中的 AutoMapper.Mapper.get_Configuration(),第23行

我已经配置了

 public class AutoMapperConfig
{
    public static MapperConfiguration RegisterMappings()
    {
        return new MapperConfiguration(cfg =>
        {
            cfg.AddProfile(new DomainToViewModelMappingProfile());
            cfg.AddProfile(new ViewModelToDomainMappingProfile());
        });
    }
}

文件DomainToViewModelMappingProfile.cs

public class DomainToViewModelMappingProfile : Profile{
      public DomainToViewModelMappingProfile(){
             CreateMap<Function, FunctionViewModel>();
             CreateMap<AppUser, AppUserViewModel>();
             CreateMap<AppRole, AppRoleViewModel>();
 }
}

File Startup.cs

 services.AddSingleton(Mapper.Configuration);
        services.AddScoped<IMapper>(sp => new Mapper(sp.GetRequiredService<AutoMapper.IConfigurationProvider>(), sp.GetService));

有人可以帮助我吗?谢谢!

3 个答案:

答案 0 :(得分:5)

我建议您将automapper extension用于microsoft-ioc。

在您的configureservice方法(启动类)中:

services.AddAutoMapper(typeof(Startup).Assembly);

然后,您无需手动配置配置文件,因为扩展名将扫描给定程序集或传递给它的程序集中的类型。

答案 1 :(得分:1)

您在进行任何通话时都使用const obj = { name: "myName", title: "developer } function prop() { this.loop = function(i) { for (i in this) { if (typeof(this[i]) == "function") { continue; } else { console.log(this[i]); } } } } prop.call(obj); obj.loop(); output >> myName, developer 吗?如果是,请尝试在参数中添加配置:

.ProjectTo<>()

答案 2 :(得分:-1)

这对我有用。

解决方案

Startup.cs中,您可以通过替换来解决

services.AddSingleton(Mapper.Configuration);

使用

services.AddSingleton<IConfigurationProvider>(AutoMapperConfig.RegisterMappings());

Source