使用自动映射器映射构造函数中的对象



>我有两个数据模型,一个用于数据库,一个用于视图模型,如

public class ModelA{
string name {get;set;}
}
public class ModelB{
ModelA Parent;
ModelB(ModelA parent){
Parent = parent;
}
}

视图模型模型是相同的

public class ViewModelA{
string name {get;set;}
}
public class ViewModelB{
ViewModelA Parent;
IMapper map;
ViewModelB(ViewModelA parent, IMapper _map){
Parent = parent;
map = _map;
}
}

我试图让自动映射器在视图模型 B 和模型 B 的参数内映射父对象。但是我尝试过的所有内容都失败了,或者我只能创建父对象的新实例(使用 ConstructUsing),而不能映射构造函数中的实例。

这是我目前对上述内容的个人资料

public ModelBProfile:Profile{
CreateMap<ModelB, ViewModelB>()
.ForMember(m => m.Parent, opt => opt.MapFrom(p => p.Parent));
}

我一直在使用统一容器和WPF和Prism。导航到视图模型 A 的视图时,Unity 会成功注入父类(其中有一个实例)。我还使用 Unity 来存储自动映射器实例。然后,我需要在视图模型中稍后映射对象。

我不得不稍微改变我的视图模型并从构造函数中删除父级。

我通过在配置文件中包含构造来解决映射器问题,如下所示:

public Profile()
{
CreateMap<ModelB, ViewModelB>()
.PreserveReferences().ConstructUsing((a, context) => new ViewModelB(context.Mapper))
.ForMember(c => c.Parent, opt => opt.MapFrom(s => s.Parent))
c.Players));
}

最新更新