首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ProjectTo()时,Mapper未初始化

使用ProjectTo()时,Mapper未初始化
EN

Stack Overflow用户
提问于 2017-01-31 15:35:10
回答 2查看 10.7K关注 0票数 19

我在我的项目中使用Automapper 5.2.0。当我在代码中使用ProjectTo()时,请获得以下错误:

地图未初始化。用适当的配置调用Initialize。如果试图通过容器或其他方式使用mapper实例,请确保没有对静态Mapper.Map方法进行任何调用,如果使用ProjectTo或UseAsDataSource扩展方法,请确保传入适当的IConfigurationProvider实例。

服务代码

代码语言:javascript
运行
复制
 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;
    }

自动配置文件

代码语言:javascript
运行
复制
   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

代码语言:javascript
运行
复制
   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));


    }

我看到了其他的问题问题,但没有解决我的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-31 15:41:19

您需要将MappingConfiguration提供程序传递给ProjectTo调用。

代码语言:javascript
运行
复制
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;
}
票数 31
EN

Stack Overflow用户

发布于 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

  1. 注册AutoMapper类似于描述的这里
  2. 注射给主计长: 私有只读IMapper _mapper;公共SomeController(ApplicationDbContext dbContext,IMapper映射器){ _mapper = mapper;}
  3. 以这样的方式传递ConfigurationProvider: ApplicationDbContext.SomeEntities.ProjectTo(_mapper.ConfigurationProvider)
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41961439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档