自动映射器: "缺少类型映射配置或不支持的映射"

4

AssertConfigurationIsValid通过了,被尝试的对象已经完全填充,但我在第一个Map请求调用时出现错误。

我正在尝试映射

Survey ToLoad = Mapper.Map<Survey>(U);

我将使用以下代码初始化automapper。
//Lots of other Maps
Mapper.Initialize(cfg => cfg.CreateMap<User, SMUser>()
      .ForMember(t => t.AccountType, s => s.MapFrom(so => so.AccountType != null ? so.AccountType : String.Empty))
      .ForMember(t => t.Username, s => s.MapFrom(so => so.Username != null ? so.Username : String.Empty)));


Mapper.Initialize(cfg => cfg.CreateMap<SurveyMonkey.Containers.Survey, Survey>().ForMember(t => t.AnalyzeUrl, s => s.MapFrom(so => so.AnalyzeUrl != null ? so.AnalyzeUrl : String.Empty))
      .ForMember(t => t.Category, s => s.MapFrom(so => so.Category != null ? so.Category : String.Empty))
      .ForMember(t => t.CollectUrl, s => s.MapFrom(so => so.CollectUrl != null ? so.CollectUrl : String.Empty))
      .ForMember(t => t.EditUrl, s => s.MapFrom(so => so.EditUrl != null ? so.EditUrl : String.Empty))
      .ForMember(t => t.Language, s => s.MapFrom(so => so.Language != null ? so.Language : String.Empty))
      .ForMember(t => t.Preview, s => s.MapFrom(so => so.Preview != null ? so.Preview : String.Empty))
      .ForMember(t => t.SummaryUrl, s => s.MapFrom(so => so.SummaryUrl != null ? so.SummaryUrl : String.Empty))
      .ForMember(t => t.Title, s => s.MapFrom(so => so.Title != null ? so.Title : String.Empty)) 
      //Some more members
);

//LISTS
Mapper.Initialize(cfg => cfg.CreateMap<List<SurveyMonkey.Containers.Collector>, List<Collector>>());

//Lots of other List Maps

我正在使用Nuget的最新稳定版本(5.2.0)。


你得到了什么错误? - CodingYoshi
2个回答

7

只调用一次Mapper.Initialize以使用整个配置,否则将覆盖它。

您可以将配置包装在一个继承AutoMapper.Profile的类中:

using AutoMapper;

public class MyAutoMapperProfile : Profile {

    protected override void Configure() {
        CreateMap<User, SMUser>();
        CreateMap<SurveyMonkey.Containers.Survey, Survey>();
        CreateMap<List<SurveyMonkey.Containers.Collector>, List<Collector>>();
    }
}

然后使用此配置文件初始化Mapper:

Mapper.Initialize(cfg => {
    cfg.AddProfile<MyAutoMapperProfile>();
    cfg.AddProfile<OtherAutoMapperProfile>();
});

AutoMapper配置


这个完美运作了。(除了configure是受保护的而不是公共的?) - Steve Wallace
你说得对,它是受保护的,我编辑了答案。 - Georg Patscheider

3

我也遇到了同样的错误,我的Startup类中使用了以下代码:

services.AddAutoMapper(typeof(startup)); => Startup类。

正因为如此,我的automapper配置文件类(继承自Automapper.Profile的类,在这种情况下是public class MyAutoMapperProfile : Profile)无法被读取。

要解决这个问题,我需要用MyAutoMapperProfile替换startup类,方法如下:services.AddAutoMapper(typeof(MyAutoMapperProfile));.

你可以进行调试并检查你的automapper映射类是否被调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接