2009-12-28 13 views
7

मेरे पास एक Winforms डेस्कटॉप एप्लिकेशन है जो एक ही इंटरफ़ेस प्रकार के साथ एकाधिक MEF भागों को लोड कर रहा है।एकाधिक MEF भागों को लोड नहीं कर सकता

समस्या:

रचना में कोई बदलाव नहीं: जब मैं एक ही प्रकार मैं निम्नलिखित अपवाद के एक से अधिक लोड करने के लिए प्रयास करें। निम्नलिखित त्रुटिओं के कारण परिवर्तन अस्वीकार कर दिए गए थे: संरचना ने एकल संरचना त्रुटि उत्पन्न की थी। मूल कारण नीचे प्रदान किया गया है। अधिक विस्तृत जानकारी के लिए CompositionException.Errors प्रॉपर्टी की समीक्षा करें।

1) कोई मान्य निर्यात पाए गए कि बाधा से मेल '((exportDefinition.ContractName = "BOCA.TaskPilot.Common.Extensions.IFolderViewExtension") & & (exportDefinition.Metadata.ContainsKey ("ExportTypeIdentity") & & " BOCA.TaskPilot.Common.Extensions.IFolderViewExtension ".quals (exportDefinition.Metadata.get_Item (" ExportTypeIdentity "))) '', अमान्य निर्यात अस्वीकार कर दिए गए हैं।

में परिणामी: सेट नहीं कर सकता आयात 'TaskPilot.Windows.MainForm.FolderViewExtension (ContractName = "BOCA.TaskPilot.Common.Extensions.IFolderViewExtension")' ओर से 'TaskPilot.Windows.MainForm'। तत्व: -:

  AggregateCatalog catalog = new AggregateCatalog(); 
     catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); 
     //string myExecName = Assembly.GetExecutingAssembly().Location; 
     //string myPath = Path.GetDirectoryName(myExecName); 
     catalog.Catalogs.Add(new DirectoryCatalog(@"C:\Data\TaskPilot\Development\Source\BOCA.TaskPilot.FolderView\bin\Debug")); 
     catalog.Catalogs.Add(new DirectoryCatalog(@"C:\Data\TaskPilot\Development\Source\BOCA.TaskPilot.TaskView\bin\Debug")); 
     // Uncomment below line and it works without exceptions raised 
     //catalog.Catalogs.Add(new DirectoryCatalog(@"C:\Data\TaskPilot\Development\Source\BOCA.FileManager\bin\Debug")); 

     var container = new CompositionContainer(catalog); 
     container.ComposeParts(this); 
TaskPilot.Windows.MainForm.FolderViewExtension (ContractName = "BOCA.TaskPilot.Common.Extensions.IFolderViewExtension")> TaskPilot.Windows.MainForm

यहाँ भागों लोड करने के लिए कोड है

यहाँ MEF भागों में से प्रत्येक के लिए वर्ग पर कोड है:

[ImportMany(AllowRecomposition = true)] 
    private IEnumerable<IFolderItemsViewExtension> TaskViewExtensions = null; 
:

[Export(typeof(IFolderItemsViewExtension)) 
public partial class TaskTreeView : DevExpress.XtraEditors.XtraUserControl, IFolderItemsViewExtension, IPartImportsSatisfiedNotification] 

यहाँ आयात मुख्य रूप पर प्रयोग किया जाता है

यदि मैं अंतिम सूची को अनदेखा करता हूं .सूची। रेखा जोड़ें यह अपवाद फेंकता है। अगर मैं इसे बिना चलाता हूं तो यह ठीक चलता है। वह पंक्ति एक अलग उपयोगकर्ता नियंत्रण लोड करती है जो IFolderItemsViewExtension इंटरफ़ेस लागू करती है। मैंने सिर्फ एक डमी प्रोजेक्ट लोड करने का प्रयास किया है कि उसके पास उपयोगकर्ता नियंत्रण है और वह इंटरफ़ेस और मुझे अभी भी एक ही अपवाद मिलता है। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं मुझे अभी भी यह अपवाद मिलता है।

ऐसा लगता है कि जब तक मैं एक ही प्रकार के एमईएफ भाग निर्यात को लोड नहीं कर रहा हूं तब तक सब कुछ ठीक चल रहा है।

यह सिस्टम के 200.22.10.0 के नवीनतम संस्करण का उपयोग कर रहा है। एमओएफ डाउनलोड से कॉम्पोनेंट मॉडेल। कॉम्पोजिशन।

उत्तर

4

त्रुटि इंगित करती है कि इसे प्रकार IFolderViewExtension का निर्यात नहीं मिल रहा है। ध्यान दें कि यह आपके द्वारा दिखाए गए IFolderItemsViewExtension के आयात से अलग है।

मेरा अनुमान है कि समस्या यह नहीं है कि आपके पास एकाधिक IFolderItemsViewExtensions हैं, लेकिन आपके पास एकाधिक IFolderViewExtensions हैं, या कोई अन्य अनुबंध है जिसमें आपके पास एक से अधिक से अधिक आयात है जिसका उपयोग आप वास्तव में करना चाहते हैं।

ऐसा इसलिए हो सकता है क्योंकि आपके पास अपनी निर्देशिका कैटलॉग में से एक से अधिक में एक ही असेंबली है। यदि आपके पास असेंबली का संदर्भ है और स्थानीय प्रतिलिपि सही है, तो यह होना आसान है।

+1

डैनियल का शायद यहां पर स्थान; यह न भूलें कि परीक्षण और त्रुटि से एमईएफ समस्याओं को डीबग करने के लिए एस्टर तरीके हैं। आपको यहां वर्णित अनुसार रचना स्थिति को डंप करना चाहिए http://mef.codeplex.com/wikipage?title=Debugging%20and%20Diagnostics&referringTitle=Guide –

+0

सहायता के लिए धन्यवाद। मैंने उन नियंत्रणों से आयात को हटाना शुरू कर दिया जो स्वयं निर्यात करते थे और सब कुछ काम करता था। मैंने आयात को वापस अंदर रखा है और अब मैं मूल समस्या को पुन: उत्पन्न करने में असमर्थ हूं। हालांकि नीचे की रेखा ... यह अब काम करता है। धन्यवाद डैनियल और निकोलस। मैं अब एमईएफ पर अपने पैरों का सप्ताह प्राप्त कर रहा हूं और डेस्कटॉप पर पूरी तरह से विस्तार योग्य अनुप्रयोगों के लिए इसकी शक्ति और क्षमता से बहुत दूर उड़ा हूं। – user120985

+0

बहुत बहुत धन्यवाद ... मेरी समस्या हल हो गई –

0

मुझे लगता है कि आपके निर्यात वर्ग में एक से अधिक निर्यात विवरण हो सकते हैं। मुझे एक ही समस्या का सामना करना पड़ रहा था और जब मैंने उस निर्यात वर्ग से अन्य सभी विशेषज्ञ बयान हटा दिए तो हल हो गया। और अब यह ठीक काम कर रहा है।

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