मेरे पास एक एमईएफ-आधारित एप्लिकेशन है जिसे प्लगइन के साथ अनुकूलित किया जा सकता है। इस एप्लिकेशन में कई आयातित भाग हैं, और जब मैं उपयोगकर्ता उस प्लगइन से छुटकारा पाने का निर्णय लेता हूं तो मैं उनमें से कुछ को रनटाइम पर हटा सकता हूं (उनमें शामिल डीडी को हटाने में सक्षम होने के लिए)।रनटाइम पर MEF प्लगइन्स को कैसे निकालें?
CompositionBatch मैं क्या जरूरत है क्या करना होगा, लेकिन यह RemovePart()
विधि के लिए इनपुट पैरामीटर के रूप में ComposablePart
उदाहरणों की जरूरत है, और मैं केवल सादे ऑब्जेक्ट ISomething इंटरफेस, या AggregateCatalog
में ComposablePartDefinition
उदाहरणों को लागू किया है। तो मेरे सवाल है:
- मैं ComposablePart उदाहरण है कि आयातित उद्देश्य यह है कि मैं से छुटकारा पाने के लिए चाहते हैं का प्रतिनिधित्व करता है कैसे मिल सकती है?
- या वैकल्पिक रूप से: मैं कंपोज़ेबलपार्ट ऑब्जेक्ट्स की सूची कैसे प्राप्त करूं जो कि से संबंधित एक निश्चित .dll से संबंधित है?
मैं इस प्रकार की तरह कुछ का प्रयोग करेंगे:
var parts = Container.Catalog.Parts
.Where(p => iDontNeed(p))
.Select(p => howDoIConvertComposablePartDefinition2ComposablePart(p));
var batch = new CompositionBatch();
parts.ToList().ForEach(part => batch.RemovePart(part));
आप
उत्कृष्ट उत्तर। अगर मैं कर सकता तो मैं इसे कई बार वोट दूंगा। –
ऐसा लगता है कि अगर एमईएफ ने भविष्य में अनलोडिंग असेंबली का समर्थन किया तो यह अच्छा होगा। मैं प्लगइन को जगह में अपडेट करने में सक्षम होना चाहता हूं। एप्लिकेशन को पुनरारंभ करना एक स्वीकार्य समझौता नहीं है, और मैं असेंबली को उतारने के बिना डीएलएल को ओवरराइट नहीं कर सकता। इसलिए मैं शायद एमईएफ का उपयोग करने में सक्षम नहीं हूं। मुझे प्रतिबिंब के साथ कुछ लिखना होगा। –
@ जोश जी: मैं नहीं देखता कि प्रतिबिंब का उपयोग करके अपनी खुद की प्लगइन प्रणाली कैसे लिखना कुछ हल करने जा रहा है। अनलोडिंग के साथ वर्णित समस्याएं एमईएफ तक सीमित नहीं हैं, यह वही है जो .NET काम करता है। –