111 votes

Automapper - comment mapper les paramètres du constructeur à la place des paramètres de propriété

Dans les cas où mes paramètres de destination sont privés, il peut être utile de mapper cet objet à l'aide du constructeur de l'objet de destination. Comment feriez-vous cela en utilisant Automapper?

155voto

Jon Erickson Points 29643

Utilisez ConstructUsing

Cela vous permettra de spécifier le constructeur à utiliser lors du mappage. mais alors toutes les autres propriétés seront automatiquement mappées selon les conventions.

Notez également que ceci diffère de ConvertUsing en ce sens que l'utilisation de la conversion ne continuera pas à être mappée via les conventions; elle vous donnera plutôt le contrôle total du mappage.

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

12voto

Matthieu Points 2635

Vous devez utiliser la méthode Map qui vous permet de définir la destination. Par exemple :

 Mapper.CreateMap<ObjectFrom, ObjectTo>()

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

var to = Mapper.Map(from, new ObjectTo(param1));
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X