मैं रेजर दृश्यों का उपयोग करके एएसपी.नेट एमवीसी 3 के लिए एक प्लगइन ढांचा तैयार कर रहा हूं, और मुझे एम्बेडेड दृश्य सही तरीके से काम करने में कोई समस्या है।एएसपी.नेट एमवीसी 3 और एम्बेडेड रेज़र विचारों के साथ एक प्लगइन ढांचा
प्लगइन ढांचे इन सुविधाओं के लिए बनाया गया है:
- प्रत्येक प्लगइन का अपना मॉडल, नियंत्रकों और नजारा दिखता है। विचारों एम्बेड किए गए संसाधन, और नियंत्रकों एक PluginController वर्ग से निकाले जाते हैं
- प्लगइन्स एक साझा वर्ग पुस्तकालय है कि PluginController आधार वर्ग
- "खोल" वेब एप्लिकेशन है जो प्लगइन्स होस्ट करता है परिभाषित करता है करने के लिए निर्भरता संदर्भ हो रहे हैं को डिजाइन समय पर किसी भी प्लगइन के संदर्भ नहीं रखना चाहिए, क्योंकि यह डिज़ाइन समय पर नहीं है जो प्लगइन है।
- प्लगइन्स की खोज (प्रतिबिंब का उपयोग)
- पंजीयन:
- प्लगइन dll के खोल आवेदन पत्र में एक फ़ोल्डर, जो /bin फ़ोल्डर
- खोल का ख्याल रखता है नहीं है में शामिल नहीं किया जाता सभी नियंत्रक (मैं इस के लिए Spring.Net उपयोग कर रहा हूँ)
- नियंत्रकों VirtualPathProvider एक कस्टम के माध्यम से उस्तरा फ़ाइलें (cshtml) की सेवा करने के लिए बनाया जा रहा है मार्गों
अब सबकुछ ठीक काम करता है, सिवाय इसके कि एम्बेडेड दृश्यों में प्लगइन डीएल के प्रकारों के संदर्भ होते हैं। तब मैं कुख्यात त्रुटि मिलती है (नाम बाहर छोड़ दिया):
The type or namespace name '[Plugins]' does not exist in the namespace '[MyPluginSolution]' (are you missing an assembly reference?)
इस का कारण यह है कि सीएससी संकलक जो क्रम शुरू हो जाती है उस्तरा विचारों को संकलित करने के है केवल मिल बिन फ़ोल्डर से dll संदर्भ और जीएसी।
मैंने this technique का उपयोग करके विचारों को पूर्व-संकलित करने का भी प्रयास किया है, लेकिन अंत में यह वही परिणाम देता है, क्योंकि रनटाइम पूर्व-संकलित रेज़र दृश्य के लिए एक रैपर को संकलित करने पर जोर देता है।
मैं निश्चित रूप से/bin फ़ोल्डर में प्लगइन dll छोड़ सकता है, लेकिन मेरे सवाल यह है:
वहाँ (और गैर GAC) एक गैर बिन में DLLs रजिस्टर करने के लिए एक रास्ता है फ़ोल्डर, और इलाज उन्हें "प्रथम श्रेणी के नागरिक" के रूप में, ताकि वे रेजर विचारों द्वारा उपयोग किए जा सकें?
बिन डीआईआर में प्लगइन डालने का कारण यह नहीं है कि आप ऐप को पुनरारंभ नहीं करना चाहते हैं? यह समाधान केवल ऐप स्टार्ट-अप (BuildManager.AddReferencedAssembly) पर एक प्लगइन लोड करता है - क्या गतिशील डायरेक्टरी में गतिशील रूप से असेंबली को संदर्भित करना संभव है? –
कारण यह है कि इस समाधान में संभावित रूप से बड़ी संख्या में प्लगइन हो सकते हैं, प्रत्येक में 3-5 डीएलएस होते हैं। और चूंकि आप उन्हें उप-फ़ोल्डरों में/बिन के नीचे नहीं डाल सकते हैं, इसलिए पसंदीदा समाधान इस के लिए एक और फ़ोल्डर का उपयोग करना था। – lasseschou