Автокартопостроитель - как отобразиться на параметры конструктора вместо методов set свойства

В случаях, где мои целевые методы set являются частными, я мог бы хотеть отобразиться на объект с помощью конструктора целевого объекта. Как Вы сделали бы этот Автокартопостроитель использования?

99
задан d219 21 August 2019 в 05:47
поделиться

1 ответ

Используйте ConstructUsing

Это позволит вам указать, какой конструктор использовать при отображении, но все остальные свойства будут автоматически отображены в соответствии с соглашениями.

Также обратите внимание, что это отличается от ConvertUsing тем, что convert using не будет продолжать отображать в соответствии с соглашениями, а даст вам полный контроль над отображением.

Mapper.CreateMap<ObjectFrom, ObjectTo>()
    .ConstructUsing(x => new ObjectTo(arg0, arg1, etc));

...

using AutoMapper;
using NUnit.Framework;

namespace UnitTests
{
    [TestFixture]
    public class Tester
    {
        [Test]
        public void Test_ConstructUsing()
        {
            Mapper.CreateMap<ObjectFrom, ObjectTo>()
                .ConstructUsing(x => new ObjectTo(x.Name));

            var from = new ObjectFrom { Name = "Jon", Age = 25 };

            ObjectTo to = Mapper.Map<ObjectFrom, ObjectTo>(from);

            Assert.That(to.Name, Is.EqualTo(from.Name));
            Assert.That(to.Age, Is.EqualTo(from.Age));
        }
    }

    public class ObjectFrom
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    public class ObjectTo
    {
        private readonly string _name;

        public ObjectTo(string name)
        {
            _name = name;
        }

        public string Name
        {
            get { return _name; }
        }

        public int Age { get; set; }
    }
}
143
ответ дан 24 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: