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?
Réponses
Trop de publicités? 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; }
}
}
Matthieu
Points
2635