我在我的项目中使用Automapper 5.2.0。当我在代码中使用ProjectTo()
时,请获得以下错误:
地图未初始化。用适当的配置调用Initialize。如果试图通过容器或其他方式使用mapper实例,请确保没有对静态Mapper.Map方法进行任何调用,如果使用ProjectTo或UseAsDataSource扩展方法,请确保传入适当的IConfigurationProvider实例。
服务代码
public async Task<FreelancerProfileViewModel> GetFreelancerProfile()
{
var id = Guid.Parse(_identity.GetUserId());
var model = await _freelancerProfiles
.AsNoTracking()
.Where(_ => _.User.Id == id)
.ProjectTo<FreelancerProfileViewModel>()
.FirstAsync();
// var viewmodel = _mapper.Map<FreelancerProfileViewModel>(model);
return model;
}
自动配置文件
public class FreelancerDashbordProfile : Profile
{
private readonly IIdentity _identity;
public FreelancerDashbordProfile(IIdentity identity)
{
_identity = identity;
var id = Guid.Parse(_identity.GetUserId());
CreateMap<FreelancerProfile, FreelancerProfileViewModel>()
.ForMember(_ => _.DoingProjectCount,
__ => __.MapFrom(_ => _.Projects.Count(project => project.ProjectState == ProjectState.Doing)))
.ForMember(_ => _.EndProjectCount,
__ => __.MapFrom(_ => _.Projects.Count(project => project.ProjectState == ProjectState.End)))
.ForMember(_ => _.ProjectCount, __ => __.MapFrom(_ => _.Projects.Count));
}
}
此外,我还将StructureMap用于IoC
AutoMapperRegistery
public AutoMapperRegistery()
{
this.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AssemblyContainingType<SkillProfile>(); // for other asms, if any.
scan.WithDefaultConventions();
scan.AddAllTypesOf<Profile>().NameBy(item => item.FullName);
});
this.For<MapperConfiguration>().Singleton().Use("MapperConfig", ctx =>
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMissingTypeMaps = true; // It will connect `Person` & `PersonViewModel` automatically.
addAllCustomAutoMapperProfiles(ctx, cfg);
});
config.AssertConfigurationIsValid();
return config;
});
this.For<IMapper>()
.Singleton()
.Use(ctx => ctx.GetInstance<MapperConfiguration>().CreateMapper(ctx.GetInstance));
}
发布于 2017-01-31 15:41:19
您需要将MappingConfiguration提供程序传递给ProjectTo调用。
public async Task<FreelancerProfileViewModel> GetFreelancerProfile()
{
var id = Guid.Parse(_identity.GetUserId());
var model = await _freelancerProfiles
.AsNoTracking()
.Where(_ => _.User.Id == id)
.ProjectTo<FreelancerProfileViewModel>(_mapper.Configuration)
.FirstAsync();
// var viewmodel = _mapper.Map<FreelancerProfileViewModel>(model);
return model;
}
发布于 2018-09-10 06:34:53
在.NET核心3.1 (AutoMapper 9.0.0)中,新的注册是:services.AddAutoMapper(typeof(Startup));
在.NET Core2.1 (AutoMapper 7.0.1)版本中,您必须传递ConfigurationProvider
。
ConfigurationProvider
:
ApplicationDbContext.SomeEntities.ProjectTo(_mapper.ConfigurationProvider)https://stackoverflow.com/questions/41961439
复制相似问题