6

मैं एएसपी.नेट एमवीसी समाधान और यूनिटी डी के साथ ऑटोमैपर का उपयोग करने की योजना बना रहा हूं। उपयोग करने के तरीके पर automapper पर पोस्ट किया गया वीडियो बहुत पुराना है और यह दिखाता नहीं है कि निर्भरता इंजेक्शन के साथ मैपर का उपयोग कैसे किया जा सकता है। स्टैक ओवरफ्लो पर अधिकांश उदाहरण मैपर.क्रेटमैप() विधि का भी उपयोग करते हैं जो अब बहिष्कृत है।एकता निर्भरता इंजेक्शन के साथ ऑटोमैपर का उपयोग कैसे करें?

automapper मार्गदर्शक कहता

बार जब आप अपने प्रकार है आप एक MapperConfiguration उदाहरण और CreateMap का उपयोग कर दो प्रकार के लिए एक नक्शा बना सकते हैं। आपको केवल एक मैपर कॉन्फ़िगरेशन आवृत्ति प्रति एपडोमेन की आवश्यकता है और स्टार्टअप के दौरान तत्काल होना चाहिए।

var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>()); 

तो मैं कोड की रेखा से ऊपर मानते हुए हूँ Global.asax

की तरह, आवेदन स्टार्टअप में जाने एक मानचित्रण करने के लिए, एक IMapper CreateMapper विधि का उपयोग पैदा करेगा।

var mapper = config.CreateMapper(); 
OrderDto dto = mapper.Map<OrderDto>(order); 

उपर्युक्त रेखा नियंत्रक में जाएगी। हालांकि मुझे समझ में नहीं आता कि यह config परिवर्तक कहां से आ रहा है? मैं नियंत्रक में IMapper इंजेक्षन कैसे करूँ?

+0

आपको कंटेनर को 'IMapper' और मैपर उदाहरण के बीच मानचित्र में कॉन्फ़िगर करना चाहिए। फिर आपको नियंत्रक से 'IMapper' पर निर्भरता घोषित करनी चाहिए (कन्स्ट्रक्टर में 'IMapper' को स्वीकार करके)। –

+0

कोई उदाहरण? तो क्या प्रत्येक इकाई के लिए मुझे नया मैपर कॉन्फ़िगरेशन() 'मैप करने की आवश्यकता होगी? उदाहरण वास्तव में मदद मिलेगी – LP13

उत्तर

11

सबसे पहले, एक MapperConfiguration बना सकते हैं और इसे से एक IMapper अपने सभी प्रकार के इस तरह से कॉन्फ़िगर किया गया है कि:

container.RegisterInstance(mapper); 

:

var config = new MapperConfiguration(cfg => 
{ 
    //Create all maps here 
    cfg.CreateMap<Order, OrderDto>(); 

    cfg.CreateMap<MyHappyEntity, MyHappyEntityDto>(); 

    //... 
}); 

IMapper mapper = config.CreateMapper(); 

फिर, इस तरह एकता कंटेनर के साथ नक्शाकार उदाहरण रजिस्टर फिर, किसी भी नियंत्रक (या सेवा) जो मैपर का उपयोग करना चाहता है, इस तरह के निर्भरता पर इस तरह की निर्भरता घोषित कर सकता है:

public class MyHappyController 
{ 
    private readonly IMapper mapper; 

    public MyHappyController(IMapper mapper) 
    { 
     this.mapper = mapper; 
    } 

    //Use the mapper field in your methods 
} 

मान लीजिए कि आपने एमवीसी फ्रेमवर्क के साथ कंटेनर को सही तरीके से स्थापित किया है, नियंत्रक को किसी समस्या के बिना रचनात्मक होना चाहिए।

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