在我的目标setter是私有的情况下,我可能希望使用目标对象的构造函数映射到该对象。你将如何使用Automapper来做到这一点?
发布于 2010-02-11 03:21:03
使用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; }
}
}发布于 2017-08-07 01:09:27
最佳做法是使用AutoMapper http://docs.automapper.org/en/stable/Construction.html中记录在案的方法
public class SourceDto
{
public SourceDto(int valueParamSomeOtherName)
{
Value = valueParamSomeOtherName;
}
public int Value { get; }
}
Mapper.Initialize(cfg => cfg.CreateMap<Source, SourceDto>()
.ForCtorParam(
"valueParamSomeOtherName",
opt => opt.MapFrom(src => src.Value)
)
);发布于 2014-03-01 03:22:01
您应该使用允许您设置目的地的Map方法。例如:
Mapper.CreateMap<ObjectFrom, ObjectTo>()
var from = new ObjectFrom { Name = "Jon", Age = 25 };
var to = Mapper.Map(from, new ObjectTo(param1));https://stackoverflow.com/questions/2239143
复制相似问题