2017-01-31 20 views
3

私はAutomapper 5.2.0 In My Projectを使用します。 IoCMapperは初期化されません。ProjectTo()を使用する場合

にも

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使用

Mapper not initialized. Call Initialize with Appropriate configuration. If you are trying to use mapper instances through a container or otherwise, make sure you do not have any calls to the static Mapper.Map methods, and if you're using ProjectTo or UseAsDataSource extension methods, make sure you pass in the appropriate IConfigurationProvider instance.

サービスコード

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; 
    } 

Automapperプロフィール:私はコードでProjectTo()を使用する場合は、このエラーを取得します。

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)); 


    } 

私は他のQuestionIssueを参照してくださいが、私の問題を解決しません。

答えて

9

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; 
} 
+0

構成プロバイダをすべてのマッピングに渡す方法はありますか。私はこれが良い解決策ではないと思う。 configファイルをすべてのクエリに渡す必要がありますか?私はそれほど良い解決策を見いだせなかった:/ – ahmet

関連する問題