2016-08-05 21 views
0

Nehmen Sie das folgende Beispiel:Kann AutoMapper zum Füllen von Eigenschaften einer Basisklasse verwendet werden?

public class Parent 
{ 
    public string Id {get; set;} 

    public Parent(string id) 
    { 
     Id = id; 
    } 
} 

public class Child : Parent 
{ 
    public string Name {get; set;} 

    public Child(string id, string name) : base(id) // <-- call base constructor 
    { 
     Name = name; 
    } 
} 

Dies ist ein klassisches Beispiel dafür, wie die Eigenschaft in der Basisklasse zu setzen.

Jetzt sagen meine Basisklasse enthält 50 Eigenschaften. Ich weiß, ich könnte jede Eigenschaft Zeile für Zeile festlegen, aber ich frage mich, ob ich AutoMapper verwenden könnte, um die Eigenschaften zu füllen?

Ich möchte so etwas wie dies in der Basisklasse tun:

public class MyClass 
{ 
    public MyClassMapData(MY_DATA data) 
      { 
       // DOC_TRACK_MAIN 
       var config = new MapperConfiguration(c => 
       { 
        c.CreateMap<MY_DATA , MyClass>(); 
       }); 

       // This will map the first 45 properties. 
       var mappedData = config.CreateMapper().Map<MY_DATA , MyClass>(data.MyData); 

       // DOC_TRACK_DETAILS 
       mappedData.PROP_46 = data.Field1; 
       mappedData.PROP_47 = data.Field2; 
       mappedData.PROP_48 = data.Field3; 
       mappedData.PROP_49 = data.Field4; 
       mappedData.PROP_50 = data.Field5;    

      // How would I set mappedData to my current instance?  
      } 

    // My 50 properties... 
} 

Antwort

0

Wenn ich richtig verstehe, Sie suchen mappedData auf Ihre aktuelle Klasse abzubilden. Wenn Sie die Zeile var mappedData = config.CreateMapper().Map<MY_DATA , MyClass>(data.MyData); in config.CreateMapper().Map<MY_DATA , MyClass>(data.MyData, this); ändern, sollten Sie diese Daten auf Ihre Klasse abbilden. Dann können Sie PROP_46 - PROP_50 für die Klasse manuell setzen