Automapper: установите это свойство - PullRequest
0 голосов
/ 04 ноября 2019

Возможно ли это сделать с помощью AutoMapper: поместите исходный объект в приватное свойство целевого объекта.

Ниже я хотел бы сделать следующее:

using System;
using System.Diagnostics;
using AutoMapper;

namespace ConsoleApp12 {

    class B {
        public B() { }
    }

    class A {
        public B B { get; private set; }
        public A() { }
    }

    class Program {
        static void Main(string[] args) {
            var config = new MapperConfiguration(cfg =>
                 cfg.CreateMap<B, A>()
                    .ForMember(ma => ma.B, mb => mb) //Error mb can't be "this"
            );
            var mapper = new Mapper(config);

            var b = new B();
            var a = mapper.Map<A>(b);

            Debug.Assert(a.B != null);
        }
    }
}

1 Ответ

1 голос
/ 04 ноября 2019

Я думаю, вам нужен немного другой синтаксис в отображении элемента.

Обратите внимание, что вторым аргументом является не значение, которое вы хотите отобразить, а выражение через MapFrom того, как добраться до значения.

Я изменил параметры лямбда-выражения, чтобы их было легче читать, а также добавил фиктивное свойство, чтобы доказать это.

void Main()
{
}



class B
{
    public int MyProperty { get; set; }
    public B() { }
}

class A
{
    public B B { get; private set; }
    public A() { }
}

class Program
{
    static void Main(string[] args)
    {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<B, A>()
               .ForMember(dest => dest.B, opt => opt.MapFrom(src => src));
        });
        var mapper = new Mapper(config);

        var b = new B() { MyProperty = 123 };
        var a = mapper.Map<A>(b);

        config.AssertConfigurationIsValid();

        Debug.Assert(a.B != null);

        Debug.Assert(a.B.MyProperty == 123);

    }
}
``
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...