2010-06-24 10 views
8

(मैं अन्य MEF/MAF सवालों के बारे में पता है, लेकिन यह एक और अधिक विशिष्ट समस्या है)एक्स्टेंसिबल डब्ल्यूपीएफ एप्लीकेशन - एमईएफ, एमएएफ या सरल लोडिंग?

मैं एक WPF अनुप्रयोग है कि मूल रूप से सिर्फ एक सरल ऐड-इन मेजबान, जीयूआई और सेटिंग हो जाएगा बनाना चाहते हैं। सभी वास्तविक कार्य एक या अधिक प्लगइन द्वारा किए जाएंगे। उन्हें एक दूसरे के बीच संवाद करने की आवश्यकता नहीं है, मुख्य आवेदन उन्हें उपयोगकर्ता इनपुट/आदेश भेज देगा और वे कुछ परिणाम लौटाएंगे (उदाहरण के लिए, प्रस्तुत करने के लिए डब्ल्यूपीएफ यूआई तत्व)।

अब, के बाद से आवेदन की कोर प्लगइन्स पर आधारित होगा मैं उन्हें प्रबंधित करने के लिए एक अच्छा तरीका लेने के लिए की जरूरत है। मैं रनटाइम पर उन्हें लोड/अनलोड/पुनः लोड करने में सक्षम होना चाहता हूं (उदाहरण के लिए जब कोई अपडेट मिलता है और डाउनलोड होता है)। उन्हें शायद अपने आवेदन डोमेन और/या स्थिरता और सुरक्षा के लिए प्रक्रिया में भाग लेना चाहिए।

कुछ अनुसंधान और प्रयोगों से मैं तीन विकल्प के लिए आया था:

  • System.Addin (MAF): ऐसा लगता है यह सब कुछ मैं जरूरत कर सकते हैं। मेजबान और प्लगइन दृश्य, अनुबंध और अनुबंध के लिए दो एडाप्टर - वहाँ पाइपलाइन एपीआई के कई संस्करण अनुकूलता आदि के लिए एक ही समय में चलाने के लिए लेकिन जब तक मैं कुछ याद कर रहा हूँ मैं एपीआई कई बार बनाने की जरूरत अनुमति देता है। इसके अलावा वहां कुछ भी है (एमईएफ की तुलना में) सूचना और संसाधनों के आसपास और अधिकांश लेख कुछ साल पुराने हैं। मुझे चिंता है कि यह धीरे-धीरे मर रहा है और इसके बजाय इसे एक नई परियोजना के लिए उपयोग नहीं करेगा।

  • MEF: यह एक सरल लगता है, लेकिन यह भी महसूस करता है वहाँ जादू है कि मैं नियंत्रित नहीं कर सकते का एक बहुत है, और परतों MAF में जितना अलग नहीं कर रहे हैं। मैं सिर्फ एक छोटी सी लाइब्रेरी चाहता हूं जिसे आप एक नई परियोजना से जोड़ सकते हैं, इंटरफेस को लागू कर सकते हैं और प्लगइन किया जाता है।

  • मैनुअल लोडिंग: अंतिम विकल्प .dlls के लिए फ़ोल्डर मैन्युअल स्कैन, उपयोग प्रतिबिंब प्लगइन वर्गों खोजने के लिए और उदाहरण बना करने के लिए होगा। हालांकि यह संभव है, मैं नहीं बल्कि कुछ ढांचे से मैन्युअल विधानसभाओं लोड करते हैं, का उपयोग अलग प्रक्रिया/appdomain आदि

तो, जो एक आवेदन के इस प्रकार के लिए सबसे अच्छा होगा पैदा करेगा, या वहाँ कुछ है कि मैं है क्या चूक गया

+0

रियल साफ विषय। जोड़े अच्छे संबंधित लेख; http://pwlodek.blogspot.com/2011/07/isolating-mef-components.html और http://blogs.msdn.com/b/tilovell/archive/2011/08/19/wf4-hosting-the- workflowdesigner या अन्य-WPF-सामान में एक-अलग-appdomain।एएसपीएक्स – Will

उत्तर

9

MEF निश्चित रूप से तीन में से सबसे आसान विकल्प है। यह वास्तव में इस सटीक परिदृश्य (एक्स्टेंसिबल अनुप्रयोगों) के साथ दिमाग में बनाया गया था।

यह वास्तव में "प्लगइन" दृश्य स्टूडियो है, जो एक WPF अनुप्रयोग है द्वारा इस्तेमाल किया तंत्र है। आपको बस इतना करना है कि आपकी "प्लगइन" एक इंटरफेस को कार्यान्वित करे या ज्ञात बेस क्लास से प्राप्त हो, और [Export] विशेषता जोड़ें। बशर्ते वह विधानसभा आपका मुख्य अनुप्रयोग की सूची में जोड़ा जाता है है, उस प्रकार [Import] एक कदम में मुख्य आवेदन के द्वारा एड जा सकता है। इस काम को करने में बहुत कम काम शामिल है।

यह मेरी सिफारिश होगी, जब तक कि एक अलग विकल्प के साथ जाने का कोई मजबूत कारण न हो। एमएएफ में अधिक अलगाव समर्थन है, लेकिन इसका उपयोग करना बहुत मुश्किल है, और अधिकांश अलगाव सुविधाओं को WPF एप्लिकेशन में उपयोग करने योग्य नहीं होगा, क्योंकि डब्ल्यूपीएफ में यूआई वास्तव में किसी भी मामले में अलग कोड नहीं हो सकता है।

+0

"... क्योंकि डब्ल्यूपीएफ में यूआई वास्तव में अलग नहीं किया जा सकता है ..." सुनिश्चित नहीं है कि आपका क्या मतलब है। मुझे कुछ यूआई वापस करने के लिए एप्लिकेशन की आवश्यकता है, उदाहरण के लिए एक बटन। इसे मुख्य ऐप द्वारा प्रस्तुत किया जाएगा लेकिन प्लगइन पर वापस कॉलबैक हो सकता है। क्या पूरे एप्लिकेशन को दुर्घटनाग्रस्त होने से रोकने के लिए प्लगइन को विभिन्न एपडोमेन में चलाने के लिए संभव है और शायद कम ट्रस्ट प्लगइन के लिए कुछ अलगाव प्रदान कर सकता है? – lacop

+0

@ आईकॉप: मैं इसके लिए एमईएफ का उपयोग करूंगा। आप एक अलग ऐपडोमेन में यूआई को वास्तव में अलग नहीं कर सकते हैं, क्योंकि इसे आपके खोल से उपयोग करने योग्य होना चाहिए (यही मेरा मतलब था)। यदि आप यूआई विस्तारशीलता के लिए ऐसा कर रहे हैं, तो एमएएफ द्वारा प्रदान किया गया ऐपडोमेन अलगाव अनुपयोगी है, क्योंकि यूआई हमेशा एकल मुख्य ऐपडोमेन (डब्ल्यूपीएफ में) में मौजूद है, और ऐपडोमेन को पार नहीं कर सकता है। –

+1

यदि आप पूरी तरह से एल्गोरिदमिक प्लगइन के लिए एमएएफ का उपयोग कर रहे हैं, जिसमें यूआई कोड नहीं है, तो प्लगइन को एक अलग ऐपडोमेन में अलग करना संभव है - लेकिन UI विस्तारशीलता के साथ, यह काम नहीं करता है - इसलिए आप एमएएफ को एकल लाभ खो देते हैं - यही कारण है कि मैं कहूंगा कि एमईएफ के साथ जाना (यह अधिक लचीला, बेहतर समर्थित, उपयोग करने में आसान, आदि ...) –

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