2012-10-16 13 views
5

मैं ऑटोमैपर का उपयोग कर रहा हूं। मेरे पास दो वर्ग हैं: एकल संपत्ति के साथ टाइपए; टाइपब दो गुणों के साथ, उनमें से एक निजी सेटर है और इस संपत्ति के लिए मूल्य कन्स्ट्रक्टर के माध्यम से पारित किया जाता है। टाइप बी में कोई डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है।ऑटोमैपर मानचित्र पर संदर्भ मान कैसे पास करें?

प्रश्न: टाइपए को टाइपब में परिवर्तित करने के लिए ऑटोमैपर को कॉन्फ़िगर करना संभव है।

public class TypeA 
{ 
    public string Property1 { get; set; } 
} 

public class TypeB 
{ 
    public TypeB(int contextId) 
    { ContextId = contextId; } 

    public string Property1 { get; set; } 

    public int ContextId { get; private set; } 
} 

public class Context 
{ 
    private int _id; 

    public void SomeMethod() 
    { 
     TypeA instanceOfA = new TypeA() { Property1 = "Some string" }; 

     // How to configure Automapper so, that it uses constructor of TypeB 
     // and passes "_id" field value into this constructor? 

     // Not work, since "contextId" must be passed to constructor of TypeB 
     TypeB instanceOfB = Mapper.Map<TypeB>(instanceOfA); 

     // Goal is to create folowing object 
     instanceOfB = new TypeB(_id) { Property1 = instanceOfA.Property1 }; 
    } 
} 

उत्तर

8

आप ConstructUsing भार के में से एक का उपयोग कर सकते AutoMapper बताते हैं कि किस निर्माता यह

TypeA instanceOfA = new TypeA() { Property1 = "Some string" }; 
_id = 3;    

Mapper.CreateMap<TypeA, TypeB>().ConstructUsing((TypeA a) => new TypeB(_id));  
TypeB instanceOfB = Mapper.Map<TypeB>(instanceOfA); 

// instanceOfB.Property1 will be "Some string" 
// instanceOfB.ContextId will be 3 

का उपयोग करना चाहिए कोई वैकल्पिक समाधान के रूप में आप हाथ से अपने TypeB बना सकते हैं AutoMapper के बाकी हिस्सों में भर सकते हैं गुण ":

TypeA instanceOfA = new TypeA() { Property1 = "Some string" }; 
_id = 3;    

Mapper.CreateMap<TypeA, TypeB>(); 

TypeB instanceOfB = new TypeB(_id); 
Mapper.Map<TypeA, TypeB>(instanceOfA, instanceOfB); 

// instanceOfB.Property1 will be "Some string" 
// instanceOfB.ContextId will be 3 
+1

चूंकि मेरे पास अलग-अलग जगह पर ऑटोमैपर की सभी कॉन्फ़िगरेशन हैं, इसलिए मैं कनवर्ट करने से पहले नए मानचित्र बनाना नहीं चाहता हूं। वैकल्पिक समाधान आयन मुझे क्या चाहिए। आपके उत्तर के लिए धन्यवाद। – Andris