我正在使用ValueInjecter将域类映射到我的视图模型。我的域类很复杂。借用this question的示例:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
}
// VIEW MODEL
public class PersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int PersonId { get; set; }
public int AddressId { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
}
我看过FlatLoopInjection,但它希望视图模型类的前缀是嵌套域模型类型,如下所示:
public class PersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Id { get; set; }
public int AddressId { get; set; }
public string AddressCity { get; set; }
public string AddressState { get; set; }
public string AddressZip { get; set; }
}
链接问题中的OP更改了他的视图模型,以匹配FlatLoopInjection期望的约定。我不想那样做。 如何将域模型映射到原始的无前缀视图模型?我怀疑我需要重写FlatLoopInjection来删除前缀,但是我不确定在哪里执行此操作。我已经查看了FlatLoopInjection的来源,但是不确定是否需要更改Match方法或SetValue方法。
答案 0 :(得分:1)
您不需要展平,请先添加地图:
Mapper.AddMap<Person, PersonViewModel>(src =>
{
var res = new PersonViewModel();
res.InjectFrom(src); // maps properties with same name and type
res.InjectFrom(src.Address);
return res;
});
然后您可以致电:
var vm = Mapper.Map<PersonViewModel>(person);