在構造函數中注入我有下面的類結構:映射子類與父使用AutoMapper
class SrcChild
{
public bool SomeProperty { get; set; }
}
class SrcParent
{
public IEnumerable<SrcChild> Children { get; set; }
}
所以SrcParent具有SrcChild對象的集合。
現在我想將SrcParent的一個實例映射到DstParent。這裏有目的地類:
class DstChild
{
public bool SomeProperty { get; set; }
public DstChild(DstParent parent)
{
if (parent == null)
throw new ArgumentNullException();
}
}
class DstParent
{
public IEnumerable<DstChild> Children { get; set; }
}
的DstParent有DstChild對象的集合,即使用構造函數注入,以保持他們的家長參考。
使用AutoMapper,我嘗試以下:
class Program
{
static void Main(string[] args)
{
/* mapping configuration */
Mapper.CreateMap<SrcChild, DstChild>()
.ConstructUsing(
resolutionContext => new DstChild((DstParent)resolutionContext.Parent.DestinationValue));
Mapper.CreateMap<SrcParent, DstParent>();
/* source parent object with two children */
var srcParent = new SrcParent
{
Children = new[] { new SrcChild(), new SrcChild() }
};
/* throws an exception */
var dstParent = Mapper.Map<DstParent>(srcParent);
Console.ReadKey();
}
}
主要部分這裏是我試圖提取映射上下文參考產生DstParent的AutoMapper配置。這不起作用((DstParent)resolutionContext.Parent.DestinationValue爲null),但也許我完全錯過了一個點?
另一個想法我是使用一個函數來創建子值,像這樣:
class Program
{
/* Should produce value for DstParent.Children */
private static IEnumerable<DstChild> MakeChildren(SrcParent src /*, DstParent dstParent */)
{
var result = new List<DstChild>();
// result.Add(new DstChild(dstParent));
return result;
}
static void Main(string[] args)
{
/* mapping configuration */
Mapper.CreateMap<SrcChild, DstChild>();
Mapper.CreateMap<SrcParent, DstParent>()
.ForMember(dst => dst.Children,
opt => opt.MapFrom(src => MakeChildren(src /*, How to obtain a reference to the destination here? */)));
/* source parent object with two children */
var srcParent = new SrcParent
{
Children = new[] { new SrcChild(), new SrcChild() }
};
var dstParent = Mapper.Map<DstParent>(srcParent);
Console.ReadKey();
}
}
,但我不知道如何(如果連有可能的話),以獲得參考DstParent由Mapper生成的對象。
有沒有人有一個想法如何做到這一點,或者我應該考慮完全放棄這個設計,擺脫父親的參考?提前致謝。