2012-09-26 11 views
8

में एनम के मूल्य के आधार पर ऑटोमैपर गंतव्य प्रकार का समाधान करें, मैं स्रोत प्रकार में एनम मान सेट के आधार पर ऑटोमैपर को मानचित्र के कॉल के गंतव्य प्रकार को चुनने का तरीका ढूंढने का प्रयास कर रहा हूं।स्रोत प्रकार

उदाहरण निम्नलिखित वर्गों को देखते हुए:

public class Organisation 
{ 
    public string Name {get;set;} 
    public List<Metric> Metrics {get;set;} 
} 

public class Metric 
{ 
    public int NumericValue {get;set;} 
    public string TextValue {get;set;} 
    public MetricType MetricType {get;set;} 
} 

public enum MetricType 
{ 
    NumericMetric, 
    TextMetric 
} 

अगर मैं निम्नलिखित वस्तु है:

public class OrganisationViewModel 
{ 
    public string Name {get;set;} 
    public List<IMetricViewModels> Metrics {get;set;} 
} 

public NumericMetric : IMetricViewModels 
{ 
    public int Value {get;set;} 
} 

public TextMetric : IMetricViewModels 
{ 
    public string Value {get;set;} 
} 
:

var Org = new Organisation { 
    Name = "MyOrganisation", 
    Metrics = new List<Metric>{ 
     new Metric { Type=MetricType.TextMetric, TextValue = "Very Good!" }, 
     new Metric { Type=MetricType.NumericMetric, NumericValue = 10 } 
    } 
} 

अब, मैं जो वर्ग हैं इसके बारे में एक viewmodel प्रतिनिधित्व करने के लिए करने के लिए इस मैप करना चाहते हैं

ऑटोमैपर.एप पर कॉल के परिणामस्वरूप एक ऑर्गनाइज़ेशन व्यू मॉडेल होगा जिसमें एक न्यूमेरिक मेट्रिक और एक टेक्स्टमैट्रिक होगा।

Automapper कॉल:

var vm = Automapper.Map<Organisation, OrganisationViewModel>(Org); 

मैं कैसे Automapper इस का समर्थन करने के विन्यास के बारे में जाना होगा? क्या यह संभव है? (मुझे उम्मीद है कि यह प्रश्न स्पष्ट है)

धन्यवाद!

+0

मैं इसे देख रहा हूं और दो प्रकार के बजाय 'मीट्रिक ' पर वापस आ रहा हूं। उदाहरण के लिए आपके पास 'int Value' और' स्ट्रिंग वैल्यू 'दोनों कैसे हैं, दोनों IMetricViewModels को लागू करते हैं। आपका इंटरफ़ेस कैसा दिखता है? – hometoast

+0

हाय, उदाहरण वास्तविक समस्या से कहीं अधिक सरल है, मेट्रिकटाइप में कई अलग-अलग प्रकार हैं जिनमें सभी अलग-अलग चीजें हैं। इंटरफ़ेस खाली है, और केवल वहां चीजों की एक सूची रखने की अनुमति देने के लिए जो सभी एक अलग दृश्य टेम्पलेट्स को हल करेंगे। (एमवीसी ऐप ... एचटीएमएल। डिस्प्लेफॉर (ऑर्गनाइज़ेशन। मेट्रिक्स) के परिणामस्वरूप 6 या 7 अलग-अलग टेम्पलेट्स की सूची होगी)। क्या यह समझ में आता है या क्या मुझे सवाल का विस्तार करना चाहिए? – Paul

उत्तर

3

ठीक है, मैं ऐसी बात मीट्रिक भाग के लिए एक TypeConverter साथ होगा प्राप्त करने के लिए सबसे अच्छा तरीका है इस समय में सोच रहा हूँ ... की तरह कुछ:

AutoMapper.Mapper.Configuration 
     .CreateMap<Organisation, OrganisationViewModel>(); 

AutoMapper.Mapper.Configuration 
     .CreateMap<Metric, IMetricViewModels>() 
     .ConvertUsing<MetricTypeConverter>(); 

फिर TypeConverter कुछ ऐसा दिखाई देगा यह:

public class MetricTypeConverter : AutoMapper.TypeConverter<Metric, IMetricViewModel> 
{ 
    protected override IMetricViewModelConvertCore(Metric source) 
    { 
     switch (source.MetricType) 
     { 
      case MetricType.NumericMetric : 
       return new NumericMetric {Value = source.NumericValue}; 

      case MetricType.TextMetric : 
       return new TextMetric {Value = source.StringValue}; 
     } 

    } 
} 

क्या यह यहां सही दृष्टिकोण जैसा प्रतीत होता है? कोई अन्य मार्गदर्शन?

+0

क्या आप इसे काम करने में सक्षम थे? मैं इसे काम करने के लिए प्रतीत नहीं कर सकता। –

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