在我看來,ValueInjecter
無法映射值類型,如enum, struct, int, double
。或者不需要映射值類型。它只會幫助映射具有相同名稱和類型的類類型的屬性。爲了在這個例子中映射枚舉,我建議,
var model = GenderModel.Male;
var dto = GenderDto.NotSpecified;
dto = (GenderDto)model;
如果枚舉嵌套在特定的類,默認ValueInjecter不能映射GenderModel
和GenderDto
因爲它們是不同類型的。所以我們可以通過客戶ValueInjecter來實現它。這是我的測試代碼,希望它可以幫助。
public enum GenderModel
{
NotSpecified = 0,
Male = 1,
Female = 2
}
public enum GenderDto
{
NotSpecified = 0,
Male = 1,
Female = 2
}
public class Person1
{
public GenderModel Gender { get; set; }
}
public class Person2
{
public GenderDto Gender { get; set; }
}
public class EnumMapInjection:IValueInjection
{
public object Map(object source, object target)
{
StaticValueInjecter.DefaultInjection.Map(source, target);
if (target is Person2 && source is Person1)
{
((Person2) target).Gender = (GenderDto)((Person1) source).Gender;
}
return target;
}
}
和主要功能代碼:
static void Main(string[] args)
{
var person1 = new Person1(){Gender = GenderModel.Male};
var person2 = new Person2(){Gender = GenderDto.Female};
person2.InjectFrom<EnumMapInjection>(person1);
}
是的,但想象一下,如果這個枚舉嵌套在一個Person類和我得到的名單人,並想將它們映射到DTO列表。除非我可以使用ValueInjecter定義映射,否則我需要迭代列表並手動映射枚舉。 –
在這種情況下,我建議客戶注射從IValueInjection繼承。我可以在我的答案中給你一個例子。 – Renshaw
完美的完成,謝謝! –