将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));
有人可以帮助我吗?谢谢!
答案 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());