В случаях, где мои целевые методы set являются частными, я мог бы хотеть отобразиться на объект с помощью конструктора целевого объекта. Как Вы сделали бы этот Автокартопостроитель использования?
Используйте 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; }
}
}