Automapper RecognizePostfix 方法不适用于数组哦后缀

Automapper RecognizePostfix method doesn't works with an array oh postfixes

终于让自动映射器开始工作了:,

现在我有这样的东西:

public class Steps
{
    public PersonalModel Personal1 { get; set; }
    public CompanyModel Company2 { get; set; }
    public SposeModel Spose3 { get; set; }
}    
public class PersonalModel
{
    public int Id { get; set; }
}    
public class CompanyModel
{
    public string Name { get; set; }    
}
public class SposeModel
{
    public string Age { get; set; }    
}

并且:

public class Content
{
    public string Dummy1 { get; set; }
    public string Dummy2 { get; set; }
    public string Dummy3 { get; set; }
    public string Dummy4 { get; set; }
    public string Dummy5 { get; set; }

    public Personal Personal { get; set; }
    public Company Company { get; set; }
    public Spose Spose { get; set; }
}    
public class Personal
{
    public int Id { get; set; }
}    
public class Company
{
    public string Name { get; set; }    
}
public class Spose
{
    public string Age { get; set; }    
}

除了名称和复杂性之外,这些对象与我的原始对象在原理上相似。

映射如下所示:

public class AutoMapperConfig
{
    public static MapperConfiguration MapperConfiguration { get; set; }

    public static void Configure()
    {
        MapperConfiguration = new MapperConfiguration(cfg => {
            cfg.AddProfile<Out>();
            cfg.CreateMap<Steps, Content>();
        });
        MapperConfiguration.AssertConfigurationIsValid();
    }
}

public class Out: Profile
{
   protected override void Configure()
   {
      CreateMap<PersonalModel, Personal>();
      CreateMap<CompanyModel, Company>();
      CreateMap<SposeModel, Spose>();

      CreateMap<Steps, Content>();
         .ForMember(dest => dest.Personal, opt => opt.MapFrom(src => src.Personal1))
         .ForMember(dest => dest.Company, opt => opt.MapFrom(src => src.Company2))
         .ForMember(dest => dest.Spose, opt => opt.MapFrom(src => src.Spose3))
         .ForMember(dest => dest.Dummy1, opt => opt.Ignore())
         .ForMember(dest => dest.Dummy2, opt => opt.Ignore())
         .ForMember(dest => dest.Dummy3, opt => opt.Ignore())
         .ForMember(dest => dest.Dummy4, opt => opt.Ignore())
         .ForMember(dest => dest.Dummy5, opt => opt.Ignore());
   }
}

我想优化映射(转到另一个问题,不要让另一个问题太复杂),在AutoMapper Configuration Documentation at GitHub,我看到RecognizePostfix方法。但是当我在配置部分中放置下一行时:

cfg.RecognizePostfix(new string[3] {"1", "2", "3"});

并从配置文件中删除下一个:

.ForMember(dest => dest.Personal, opt => opt.MapFrom(src => src.Personal1))
.ForMember(dest => dest.Company, opt => opt.MapFrom(src => src.Company2))
.ForMember(dest => dest.Spose, opt => opt.MapFrom(src => src.Spose3))

我遇到异常:

AutoMapper.AutoMapperConfigurationException: Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type

我做错了什么?

实际上我不知道这是否应该被视为错误或者它应该如何工作,但显然 pre/postfixes 仅适用于它所在的配置文件已定义。

对于您的情况,您可以快速解决问题,将 RecognizePostfixes 调用移至配置文件:

public static void Configure()
{
    MapperConfiguration = new MapperConfiguration(cfg => {
        cfg.AddProfile<Out>();
    });
    MapperConfiguration.AssertConfigurationIsValid();
}
...

个人资料:

public class Out : Profile
{
    protected override void Configure()
    {
        RecognizePostfixes("1", "2", "3");

        CreateMap<PersonalModel, Personal>();
        CreateMap<CompanyModel, Company>();
        CreateMap<SposeModel, Spose>();

        CreateMap<Steps, Content>()
           .ForMember(dest => dest.Dummy1, opt => opt.Ignore())
           .ForMember(dest => dest.Dummy2, opt => opt.Ignore())
           .ForMember(dest => dest.Dummy3, opt => opt.Ignore())
           .ForMember(dest => dest.Dummy4, opt => opt.Ignore())
           .ForMember(dest => dest.Dummy5, opt => opt.Ignore());
    }
}