我使用的是自动播放器(适用于.net 3.5)。这是一个例子来说明我想要做的事情:
我想将A对象映射到B对象。类定义:
class A
{
public I1 MyI { get; set; }
}
class B
{
public I2 MyI { get; set; }
}
interface I1
{
string StringProp1 { get; }
}
interface I2
{
string StringProp1 { get; }
}
class CA : I1
{
public string StringProp1
{
get { return "CA String"; }
}
public string StringProp2 { get; set; }
}
class CB : I2
{
public string StringProp1
{
get { return "CB String"; }
}
public string StringProp2 { get; set; }
}
映射代码:
A a = new A()
{
MyI = new CA()
};
// Mapper.CreateMap ...?
B b = Mapper.Map<A,B>(a);
我希望生成的对象b用一个CB实例填充。因此,automapper需要知道A映射到B,CA映射到CB,并且在创建B时使用CB填充它的MyI prop,如何指定此映射?
答案 0 :(得分:10)
这样的事情:
class Program
{
static void Main(string[] args)
{
Mapper.Initialize(x => x.AddProfile<MappingProfile>());
var a = new A()
{
MyI = new CA()
{
StringProp2 = "sp2"
}
};
var b = Mapper.Map<A, B>(a);
Console.WriteLine("a.MyI.StringProp1: " + a.MyI.StringProp1);
Console.WriteLine("b.MyI.StringProp1: " + b.MyI.StringProp1);
}
}
&gt; = AutoMapper 2.0.0
public class MappingProfile : Profile
{
protected override void Configure()
{
CreateMap<CA, CB>();
CreateMap<CA, I2>().As<CB>();
CreateMap<A, B>();
}
}
AutoMapper 1.1.0.188(.Net 3.5)
public class MappingProfile : Profile
{
protected override void Configure()
{
CreateMap<CA, CB>();
CreateMap<CA, I2>()
.ConstructUsing(Mapper.Map<CA, CB>)
;
CreateMap<A, B>();
}
}