使用automapper在构造函数中映射对象

时间:2017-03-31 08:28:29

标签: c# mapping automapper

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

public class ModelA{
    string name {get;set;}
}

public class ModelB{
    ModelA Parent;

    ModelB(ModelA parent){
        Parent = parent;
   }
}

ViewModel模型是相同的

public class ViewModelA{
    string name {get;set;}
}

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

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

这是我目前对上述内容的简介

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

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

1 个答案:

答案 0 :(得分:0)

我不得不稍微改变我的viewmodel并从构造函数中删除了父。

我通过在我的个人资料中包含Constructusing来解决映射器问题:

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));
}