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




mvc tutorial (4)

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

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

    }

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

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

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

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

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


हालांकि, अपने स्वयं के कंट्रोलर फैक्ट्री बनाने के लिए उचित है, लेकिन मुझे प्रत्येक प्रोजेक्ट में अपने सभी नियंत्रकों को परिभाषित करना अधिक सुविधाजनक लगता है, लेकिन उन्हें मेरे साझा प्रोजेक्ट में नियंत्रकों से प्राप्त करें:

namespace MyProject1.Controllers
{
   public class MyController : MySharedProject.Controllers.MyController
   {
      // nothing much to do here...
   }
}

namespace MySharedProject.Controllers
{
   public abstract class MyController : System.Web.Mvc.Controller
   {
      // all (or most) of my controller logic here...
   }
}

इसमें अतिरिक्त लाभ है कि आपके पास अपने कंट्रोलर तर्क को रखने के लिए एक जगह है जो परियोजना से परियोजना में भिन्न है। साथ ही, अन्य डेवलपर्स के लिए आपके कंट्रोलर तर्क को तुरंत ढूंढना आसान है क्योंकि नियंत्रक मानक स्थान पर मौजूद हैं।

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


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

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

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

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

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

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

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

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


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

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

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







asp.net-mvc