मेरे पास आंतरिक रूप से विकसित एक कस्टम व्यू इंजन है। उसी प्रोजेक्ट में, मैं कुछ पृष्ठों के लिए कुछ पेजों और मेरे कस्टम इंजन के लिए रेजर का उपयोग करना चाहता हूं। एमवीसी फ्रेमवर्क कैसे इंजन का उपयोग करने के लिए चुनता है? बीटीडब्ल्यू, मेरे कस्टम इंजन को किसी भी टेम्पलेट की आवश्यकता नहीं है, यह डेटाबेस से मेटा-डेटा के आधार पर पृष्ठों को प्रस्तुत करता है। मेरे कस्टम इंजन के लिए मैं किसी भी टेम्पलेट फाइलों को सेट नहीं करना चाहता हूं। मुझे उम्मीद है कि नियंत्रक नाम और क्रिया नाम के आधार पर कुछ इंजन का उपयोग करने के लिए ढांचे को चलाने का एक तरीका होना चाहिए। क्या यह लचीलापन एमवीसी 3 में मौजूद है?एमवीसी 3 कैसे व्यूइंजिन का उपयोग करने के लिए चुनता है यदि मेरे पास व्यूइंजिन संग्रह में एकाधिक इंजन हैं?
उत्तर
आपके व्यू इंजन को IViewEngine इंटरफ़ेस लागू करना चाहिए। ViewEngines.Engines.Add()
विधि के साथ अपना व्यू इंजन पंजीकृत करने के बाद, एमवीसी फ्रेमवर्क FindView और FindPartialView पर कॉल करेगा जब भी इसे दृश्य प्रस्तुत करने के लिए दृश्य इंजन की आवश्यकता होती है।
एकाधिक व्यू इंजनों के साथ-साथ संचालित करने के लिए यह बिल्कुल संभव है। यदि आप नहीं चाहते हैं कि आपके व्यू इंजन को एक विशिष्ट परिस्थिति में return new ViewEngineResult(new string[0]);
FindView
या FindPartialView
से और एमवीसी एक और दृश्य इंजन चुनेंगे। यदि आप अपने व्यू इंजन का उपयोग करना चाहते हैं तो आप व्यू क्लास (जो IView को कार्यान्वित कर रहा है) को इंगित करने के लिए एक मान्य ViewEngineResult लौटाएं, जिससे आप Render परिणाम प्राप्त करना चाहते हैं।
useCache
पैरामीटर के साथ कुछ विशिष्टताएं हैं। यदि आप और जानना चाहते हैं, तो लुई डीजेर्डिन द्वारा TechEd 2011 में अपना खुद का व्यू इंजन बनाने पर एक उत्कृष्ट प्रस्तुति थी। आप चैनल 9 पर Writing an ASP.NET MVC View Engine का वीडियो पा सकते हैं।
मुझे लगता है कि IViewPageActivator
, http://bradwilson.typepad.com/blog/2010/10/service-location-pt11-view-page-activator.html और http://msdn.microsoft.com/en-us/library/system.web.mvc.iviewpageactivator(v=vs.98).aspx को लागू करने का सबसे आसान तरीका होगा।
मुझे लगता है कि Create
विधि से वापस लौटने से यह डिफ़ॉल्ट रूप से डिफ़ॉल्ट IViewPageActivator
पर डिफ़ॉल्ट हो जाएगा। आप इसे DependencyResolver
, http://bradwilson.typepad.com/blog/2010/10/service-location-pt5-idependencyresolver.html में इंजेक्ट करते हैं।
यदि आप निर्भरता इंजेक्शन ढांचे का उपयोग एन इंजेक्ट या यूनिटी के रूप में कर रहे हैं तो इसका उपयोग करना आसान हो सकता है।
हां। मैं एकता के साथ निर्भरता इंजेक्शन का उपयोग कर रहा हूँ। क्या आप कृपया बता सकते हैं कि इसे IViewPageActivator को कार्यान्वित करने का समाधान कैसे किया जा सकता है। यदि IViewPageActivator में कोई भी कस्टम कार्यान्वयन जोड़ें तो फिर भी वही समस्या जो मैंने पोस्ट की है, यहां भी मौजूद है। क्या मेरे पास एक से अधिक IViewPageActivator हो सकता है? एक या दूसरे को कैसे कॉन्फ़िगर करें? – Charasala
मुझे नहीं पता कि आपके पास एक से अधिक IViewPageActivator हो सकता है, लेकिन इसे हल करने वाले अपने कस्टम को कार्यान्वित करना मुश्किल नहीं होना चाहिए। साथ ही, मुझे लगता है कि वापस लौटने से डिफ़ॉल्ट व्यक्ति को लात मारना होगा। –
धन्यवाद मार्को। "यदि आप नहीं चाहते हैं कि आपका व्यू इंजन एक विशिष्ट परिस्थिति में इस्तेमाल किया जाए तो आप नई व्यूइंजिन रीसेट (नई स्ट्रिंग [0]) लौटाएं; FindView या FindPartialView से और एमवीसी एक और व्यू इंजन चुनेंगे।" यह वास्तव में अच्छी तरह से काम किया। लेकिन मेरे कस्टम इंजन के लिए यह अनावश्यक यात्रा है जब मैं वास्तव में जानता हूं कि कुछ मामलों में कौन सा इंजन भी उपयोग करता है। शायद एमवीसी डिजाइनरों ने इस स्थिति के बारे में नहीं सोचा था। एक बार फिर धन्यवाद! – Charasala