自动映射器配置文件不起作用

本文关键字:配置文件 不起作用 映射 | 更新日期: 2023-09-27 18:34:16

>有谁知道为什么这样:

Mapper.Configuration.RecognizeDestinationPrefixes("Foo");
Mapper.CreateMap<A, B>();

但这不会:

Mapper.CreateProfile("FooPrefix").RecognizeDestinationPrefixes("Foo");
Mapper.CreateMap<A, B>()
      .WithProfile("FooPrefix");

自动映射器配置文件不起作用

虽然这个问题现在已经很老了,但我认为回答它会很有用,因为我花了很长时间试图让配置文件工作。

尽管有很多方法可以配置配置文件,但似乎我可以让它工作的唯一方法如下:

public class ExampleProfile : Profile
{
    protected override void Configure()
    {
        ReplaceMemberName("Z", "A");
        CreateMap<Source, Destination>(); // Notice this is CreateMap, NOT Mapper.CreateMap...
    }
    public override string ProfileName
    {
        get { return this.GetType().Name; }
    }
}

然后,在配置中设置配置文件:

Mapper.Initialize(cfg => cfg.AddProfile<ExampleProfile>());

给定源和目标类,如下所示:

public class Source
{
    public string Zabc { get; set; }
}
public class Destination
{
    public string Aabc { get; set; }
}

这现在应该可以工作:

var source = new Source { Zabc = "source" };
var dest = Mapper.Map<Destination>(source);
Assert.AreEqual(source.Zabc, dest.Aabc);

配置文件名称不同。创建配置文件时使用 FooxPrefix ,然后在创建地图时使用 FooPrefix 。