2012-12-21 12 views
8

मैं अपने पहले गैर-उदाहरण ऑर्चर्ड मॉड्यूल को विकसित करने में व्यस्त हूं। यह कस्टम (ईएफ) डेटा एक्सेस के साथ नियंत्रकों और विचारों का एक मुट्ठी भर है, और यह ऑर्चर्ड सामग्री प्रकारों और भागों से काफी हद तक स्वतंत्र है। आम तौर पर मैंने एप्लिकेशन_स्टार्ट हैंडलर में मैपिंग सेट अप की है, लेकिन इस एमवीसी मॉड्यूल में किए गए कार्यों को ऑर्चर्ड एप्लिकेशन के संदर्भ में बुलाया जाएगा, मेरे पास अब प्रवेश का बिंदु नहीं है। मेरा सबसे स्पष्ट और तत्काल समाधान मैप किए गए दृश्य मॉडल के लिए स्थिर रचनाकारों में मैपिंग प्रारंभिक स्थानांतरित करना है, उदा।ऑर्चर्ड मॉड्यूल में ऑटोमैपर मैपिंग्स को मैं कहां से प्रारंभ कर सकता हूं?

public class ApplicantPersonalDetailsModel : MappedViewModel<Applicant> 
{ 
    static ApplicantPersonalDetailsModel() 
    { 
     Mapper.CreateMap<Applicant, ApplicantPersonalDetailsModel>().Bidirectional(); 
    } 
    .... 
} 

मैं यह और कैसे कर सकता हूं? क्या एमवीसी 3/4 में सामान्य रूप से ऐसा करने का कोई बेहतर तरीका है, या अधिमानतः, एक घटना या हुक जिसे मैं ऑर्चर्ड एप्लिकेशन में पकड़ सकता हूं ताकि इसे एप्लिकेशंस स्टार्टअप पर भी प्राप्त किया जा सके?

उत्तर

3

हैंडलर आपके चर को प्रारंभ करने के लिए सबसे अच्छी जगह है, भले ही आपने अपने मॉड्यूल के अंदर किसी भी हिस्से को परिभाषित नहीं किया है, आप एक ड्राइवर के बिना लेकिन हैंडलर के साथ परिभाषित कर सकते हैं।

public class InitPartHandler : ContentHandler 
{ 
    public InitPartHandler(IRepository<InitPartRecord> repository) 
    { 
     OnInitializing<InitPart>((context, part) => 
       // do your initialization here 
      ); 
    } 
} 

संपादित

InitPart and InitPartRecord would be 

public class InitPart : ContentPart<InitPartRecord> 
{ 

} 

public class InitPartRecord : ContentPartRecord 
{ 

} 
+0

क्या 'InitPartRecord' हो सकता है तो बस एक डमी हो, यानी खाली, कक्षा? ऑर्चर्ड सिर्फ सभी हैंडलर पर इनिट पर कॉल करता है, या क्या मुझे इसे कहीं भी एक भाग पंजीकृत करना है, भले ही मैं इसे परिभाषित करने के लिए अन्य कोड नहीं लिखूं? – ProfK

+0

हां यह कर सकता है। InitPartHandler को सामग्री हैंडलर से बस चलाकर हैंडलर सूची में सब्सक्राइब किया जाएगा। और इनिटपार्ट और इनिटपार्ट रिकार्ड आपके द्वारा उल्लेखित एक डमी क्लास होगा। मेरे संपादन को देखें। –

6

तरह से मैं यह किया है को लागू करने IOrchardShellEvents

public class MenuOrchardShellEvents : IOrchardShellEvents 
    { 
     public void Activated() 
     { 
      Mapper.CreateMap<YSRB.Menu.Models.Records.Customer, YSRB.Menu.Models.ViewModels.CustomerViewModel>() 
       .ForMember(c => c.CustomerType, 
        m => m.MapFrom(
         x => (CustomerTypes)x.CustomerType 
        ) 
       ); 
      Mapper.CreateMap<YSRB.Menu.Models.ViewModels.CustomerViewModel, YSRB.Menu.Models.Records.Customer>() 
       .ForMember(c => c.CustomerType, 
        m => m.MapFrom(
         x => (int)x.CustomerType 
        ) 
       ); 
     } 

     public void Terminating() 
     { 
      //Do nothing 
     } 
    } 

आशा इस में मदद करता है के द्वारा होता है।

+0

मुझे यह कहां रखना चाहिए? मेरे मॉड्यूल और ऑर्चर्ड के अंदर एक यादृच्छिक नामित कक्षा में जादूगर इसे पाता है? – Highmastdon

+0

@ हाइमास्टडन हाँ। मेरा मानना ​​है कि ऑर्चर्ड को उन सभी वर्गों को मिलेगा जो IOrchardShellEvents को लागू करते हैं – ysrb

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