AutoMapper:无法从AfterMap()中访问传递给Map()的原始对象实例

时间:2012-11-06 09:35:39

标签: map automapper

我有这样的代码:

    //Fields
    Product _prod, _existingProd;

    void Test()
    {
        _prod = MakeAndPopulateSomeRandomProduct();
        _existingProd = GetProdFromDb(1);

        Mapper.CreateMap()
        .AfterMap((s, d) =>
        {
            Console.WriteLine(d==_existingProd); //Why does this print false?

            //Customize other properties on destination object
        });

    Mapper.Map(_prod, _existingProd);
}

当我致电Test()时,会打印false,但我期待true。在我的场景中,能够通过object参数访问原始目标AfterMap非常重要。我只包括用于演示问题的字段,但在我的实际代码中,我没有直接访问它们。在自定义映射时,如何访问传递给Map()的对象实例?

1 个答案:

答案 0 :(得分:1)

以下示例有效。可能你正在使用一些创建新实例的类型转换器...还请提供所有映射配置以更好地理解问题。

[TestFixture]
public class AfterMap_Test
{
    //Fields
    private Product _prod, _existingProd;

    [Test]
    public void Test()
    {
        Mapper.CreateMap<Product, Product>()
            .AfterMap((s, d) =>
                          {
                              Trace.WriteLine(d == _existingProd); //Why does this print false?

                              //Customize other properties on destination object
                          });
        _existingProd = new Product {P1 = "Destination"};
        _prod = new Product {P1 = "Source"};
        Mapper.Map(_prod, _existingProd);
    }
}

internal class Product
{
    public string P1 { get; set; }
}