2

次のようなコードがあります。

    //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()マッピングをカスタマイズするときに渡されたオブジェクト インスタンスにアクセスするにはどうすればよいですか?

4

1 に答える 1

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; }
}
于 2012-11-06T20:11:33.280 に答える