2013-10-08 65 views
2

有谁知道为什么这个工程:Automapper配置文件不工作

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

但这并不:

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

+0

这是一个很好的问题,但时间过去了2016我仍然无法找到答案。这个CreateProfile()方法似乎什么都不做。 – Xinan

回答

3

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

虽然有一堆的方法来配置配置文件,似乎有什么我能得到它的工作的唯一办法如下:

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

这个现在应该WOR k:

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

我目前没有使用C#,因此需要一些时间来验证答案。如果您愿意,我会“暂时”接受:-) –

+1

嘿 - 不用担心。我主要是因为这个答案出现在搜索结果中,所以我可以再次找到它:) – Robert

2

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

+0

当我编写一个快速的“伪代码”示例时,错误就在StackOverflow的这里。它不适用于正确的前缀。 –