【问题标题】:Using automapper to map objects within constructor使用 automapper 在构造函数中映射对象
【发布时间】:2017-03-31 08:28:29
【问题描述】:

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

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 实例。然后我需要在视图模型中稍后映射对象。

【问题讨论】:

  • 我目前使用 AutoMapper 有点过时了,但你可以试试 thisthisthis
  • @Rabban 感谢您的帮助,我用这个 .PreserveReferences().ConstructUsing((league, context) => new LeagueModel(context.Mapper)) 解决了我的问题

标签: c# mapping automapper


【解决方案1】:

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

我通过在我的个人资料中包含 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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多