2017-10-12 14 views
0

私は過去にAutomapperを使用していたValueInjectorを手に入れようとしています。ある列挙型を別の列挙型に変換したいのですが、列挙型の名前だけが異なるが、プロパティ名と値は同じです。Value Injectorを使用してenumをマップする方法

public enum GenderModel 
    { 
     NotSpecified = 0, 
     Male = 1, 
     Female = 2 
    } 

public enum GenderDto 
    { 
     NotSpecified = 0, 
     Male = 1, 
     Female = 2 
    } 

その後、私はこの

var model = GenderModel.Male; 
      var dto = GenderDto.NotSpecified; 
      dto.InjectFrom(model); 

のようにマップしようとしている私はDTOオブジェクトで男性を取得するために期待していますが、それはまだNotSpecifiedに設定されています。

私には何が欠けていますか?ご案内ください。

答えて

2

私の意見では、ValueInjecterは、enum, struct, int, doubleのような値の型をマップできません。または、値型の必要なマップはありません。同じ名前と型を持つクラス型のプロパティをマップするだけです。列挙型は、特定のクラスにネストされている場合、それらは異なるタイプであるため、この例では列挙型をマップするために、私は、

var model = GenderModel.Male; 
    var dto = GenderDto.NotSpecified; 
    dto = (GenderDto)model; 

を示唆して、デフォルトではValueInjecterはGenderModelGenderDtoをマッピングすることはできません。したがって、顧客の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); 
    } 
+0

はいますが、この列挙型は、人クラスにネストされている場合を想像し、私はのリストを取得していますDTOのリストにマップしたいと思っています。 ValueInjecterを使用してマッピングを定義できない限り、リストを繰り返し、列挙型を手動でマップする必要があります。 –

+0

この場合、IValueInjectionから継承した顧客インジェクションを提案します。私はあなたに私の答えの例を与えることができます。 – Renshaw

+0

完璧に、ありがとう! –

0

型キャストは、ソリューション

dto = (GenderDto)model; 
関連する問題