私の意見では、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;
}
}
、main関数のコードは:
static void Main(string[] args)
{
var person1 = new Person1(){Gender = GenderModel.Male};
var person2 = new Person2(){Gender = GenderDto.Female};
person2.InjectFrom<EnumMapInjection>(person1);
}
はいますが、この列挙型は、人クラスにネストされている場合を想像し、私はのリストを取得していますDTOのリストにマップしたいと思っています。 ValueInjecterを使用してマッピングを定義できない限り、リストを繰り返し、列挙型を手動でマップする必要があります。 –
この場合、IValueInjectionから継承した顧客インジェクションを提案します。私はあなたに私の答えの例を与えることができます。 – Renshaw
完璧に、ありがとう! –