asp.net mvc - tutorial - एएसपीएनटी एमवीसी नियंत्रकों को एक अलग परियोजना में डाल दिया




mvc tutorial (3)

मैं बस एएसपीएनटी एमवीसी सीख रहा हूं और मैं यह समझने की कोशिश कर रहा हूं कि मेरे नियंत्रकों को एक अलग परियोजना में कैसे स्थानांतरित किया जाए। आम तौर पर जब मैंने पहले एएसपीनेट वेब ऐप डिज़ाइन किए हैं, तो मैंने अपने मॉडल के लिए एक प्रोजेक्ट बनाया है, दूसरा मेरे तर्क के लिए, और फिर वेब था।

अब जब मैं एएसपीएनटी एमवीसी सीख रहा हूं, तो मैं एक समान पैटर्न का पालन करने की उम्मीद कर रहा था और मॉडलों और नियंत्रकों को अपनी अलग परियोजनाओं में रखता था, और वेब में दृश्य / स्क्रिप्ट / सीएसएस छोड़ देता था। मॉडल भाग आसान था, लेकिन मुझे समझ में नहीं आता कि एक अलग परियोजना में मेरे नियंत्रकों को "पाया" कैसे बनाया जाए। साथ ही, मैं जानना चाहूंगा कि यह सलाह दी जाती है या नहीं। धन्यवाद!


मेरे द्वारा उपयोग किए जाने वाले पृथक्करण का सबसे सरल रूप मूल एमवीसी प्रोजेक्ट में "जैसा है" दृश्यों को बनाए रखना है, लेकिन नियंत्रकों को हटा दें। फिर एक नई कक्षा पुस्तकालय परियोजना में नियंत्रक कक्षाएं जोड़ें और सुनिश्चित करें कि वे नियंत्रक से उत्तराधिकारी हैं।

एमवीसी रूटिंग इंजन क्लास लाइब्रेरी में नियंत्रकों के लिए स्वचालित रूप से रूट हो जाएगा और नियंत्रक स्वचालित रूप से मूल एमवीसी प्रोजेक्ट से दृश्यों का निर्माण करेंगे, बशर्ते आपके पास संदर्भ और उपयोग सही तरीके से हों।

मैं एक एचटीएमएल रिपोर्ट मॉड्यूल को लागू करने के लिए इस आर्किटेक्चर का उपयोग कर रहा हूं जिसे मुख्य समाधान से अलग से संकलित और तैनात किया जा सकता है। अंत में मैं एसएसआरएस से मुक्त हूं!


सबसे पहले, अपने मॉडल को एक अलग परियोजना में रखना निश्चित रूप से एक अच्छा विचार है। जैसा कि आपने पाया है, यह छोटा है।

नियंत्रकों और विचारों के संबंध में, मुझे उन्हें सबसे बुनियादी परियोजनाओं के लिए अलग करने के लिए कोई स्पष्ट लाभ नहीं दिख रहा है, हालांकि आपको किसी विशेष एप्लिकेशन में ऐसा करने की विशेष आवश्यकता हो सकती है।

यदि आप ऐसा करने का विकल्प चुनते हैं, तो आपको ढांचे को बताना होगा कि अपने नियंत्रकों को कैसे ढूंढें। ऐसा करने का मूल तरीका अपने स्वयं के नियंत्रक कारखाने की आपूर्ति करना है। आप इसे कैसे किया जाता है इसके बारे में एक विचार प्राप्त करने के लिए DefaultControllerFactory के स्रोत स्रोत पर एक नज़र डाल सकते हैं। इस वर्ग को उप-टाइप करना और GetControllerType (स्ट्रिंग कंट्रोलरनाम) विधि को ओवरराइड करना आपके द्वारा पूछे जा रहे कार्यों को पूरा करने के लिए पर्याप्त हो सकता है।

एक बार जब आप अपना खुद का कस्टम कंट्रोलर फैक्ट्री बना लेते हैं, तो आप निम्न पंक्ति को global.asax में Application_Start में जोड़ते हैं ताकि फ्रेमवर्क कहां मिल सके:

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());

अपडेट करें: इस पोस्ट और पोस्ट को अधिक जानकारी के लिए लिंक करें। उस पोस्ट पर फिल हैक की टिप्पणी भी देखें:

ControllerBuilder.Current.DefaultNamespaces.Add(
    "ExternalAssembly.Controllers");

... जो एक पूर्ण समाधान नहीं है, लेकिन संभवतः सरल मामलों के लिए पर्याप्त है।


  • अपने एमवीसी परियोजना के लिए कक्षा पुस्तकालय जोड़ें।
  • कक्षा में निम्नलिखित कोड जोड़ें (आपके नियंत्रक कोड के लिए)

    namespace ContactController
    {
    public class ContactController : Controller
    {
        public ActionResult Call()
        {
            ViewBag.Title = "Inside MyFirst Controller.";
            return View();
        }
    }
    

    }

  • एमवीसी प्रोजेक्ट व्यू फ़ोल्डर पर संपर्क के लिए फ़ोल्डर जोड़ें और एक कॉल.cshtml फ़ाइल बनाएं।

  • अपनी मुख्य एमवीसी परियोजना में कक्षा पुस्तकालय परियोजना संदर्भ जोड़ें।

  • अंततः संपर्क नियंत्रक नामस्थान को रूट कॉन्फ़िगर में संदर्भित करने के लिए।





asp.net-mvc