2010-10-13 17 views
5

का उपयोग करके किसी दिए गए प्रॉपर्टी के लिए एक विशिष्ट प्रकार कनवर्टर निर्दिष्ट करने के लिए कैसे करें किसी दिए गए प्रॉपर्टी के लिए ऑटोमैपर द्वारा उपयोग किए जा रहे प्रकार कनवर्टर को ओवरराइड कैसे कर सकता हूं?ऑटोमैपर

उदाहरण के लिए

, अगर मेरे पास है:

public class Foo 
{ 
    public string Name { get; set; } 
} 

public class Bar 
{ 
    public string Name { get; set; } 
} 

अब मैं बस Bar.Name को Foo.Name लेकिन एक निर्दिष्ट प्रकार कनवर्टर का उपयोग कर करना चाहते हैं। मैं देखता हूं कि मैं इसका उपयोग कैसे कर सकता हूं:

Mapper 
    .CreateMap<Foo,Bar>() 
    .ForMember(x => x.Name, opt => opt.ResolveUsing<FooNameResolver>()); 

लेकिन यह हार्ड कोड फू पर नाम संपत्ति का उपयोग करने के लिए रूपांतरण है। अगर मेरे पास इस या अन्य वर्गों में अन्य गुणों पर समान प्रकार का रूपांतरण है, तो मुझे प्रत्येक के लिए एक रिज़ॉल्वर क्लास बनाना होगा।

और मैं स्ट्रिंग -> स्ट्रिंग के लिए कनवर्टर निर्दिष्ट नहीं करना चाहता क्योंकि यह रूपांतरण इस संपत्ति या अन्य लोगों के लिए विशिष्ट है।

मैं बस प्रकार कनवर्टर को ओवरराइड करना चाहता हूं! मुझे यकीन है कि यह संभव होना चाहिए हूँ, लेकिन मैं इस पर रिक्त कर रहा हूँ

:-(मैं कुछ इस तरह के बाद कर रहा हूँ:।

Mapper 
    .CreateMap<Foo,Bar>() 
    .ForMember(x => x.Name, opt => opt.Using<MySpecialStringConverter>()); 

उत्तर

7

मैं जवाब AutoMapper के लिए इकाई परीक्षण के माध्यम से पढ़ने की खोज की यह बहुत स्पष्ट नहीं, धाराप्रवाह इंटरफेस के बावजूद, मानचित्रण विकल्प पर तरीकों की वजह से कई शून्य लौट हालांकि, ResolveUsing<>() शून्य वापस नहीं करता है, लेकिन आप और अधिक विकल्प निर्दिष्ट करने की अनुमति देता यहां समाधान निहित है:।।

Mapper 
    .CreateMap<Source,Dest> 
    .ForMember(dest => dest.Name, 
       opt => opt.ResolveUsing<MySpecialStringConverter>() 
          .FromMember(source => source.Name)); 

मैंनिर्दिष्ट नहीं करना पसंद करते हैंजब संपत्ति डिफ़ॉल्ट है जो ऑटोमैपर किसी भी तरह का उपयोग करेगी और जो भी मैं उपयोग करना चाहता हूं वह प्रकार कनवर्टर/रिज़ॉल्वर ओवरराइड है।

संबंधित मुद्दे