मेरे पास एक 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 के नवीनतम संस्करण का उपयोग कर रहा है। एमओएफ डाउनलोड से कॉम्पोनेंट मॉडेल। कॉम्पोजिशन।
डैनियल का शायद यहां पर स्थान; यह न भूलें कि परीक्षण और त्रुटि से एमईएफ समस्याओं को डीबग करने के लिए एस्टर तरीके हैं। आपको यहां वर्णित अनुसार रचना स्थिति को डंप करना चाहिए http://mef.codeplex.com/wikipage?title=Debugging%20and%20Diagnostics&referringTitle=Guide –
सहायता के लिए धन्यवाद। मैंने उन नियंत्रणों से आयात को हटाना शुरू कर दिया जो स्वयं निर्यात करते थे और सब कुछ काम करता था। मैंने आयात को वापस अंदर रखा है और अब मैं मूल समस्या को पुन: उत्पन्न करने में असमर्थ हूं। हालांकि नीचे की रेखा ... यह अब काम करता है। धन्यवाद डैनियल और निकोलस। मैं अब एमईएफ पर अपने पैरों का सप्ताह प्राप्त कर रहा हूं और डेस्कटॉप पर पूरी तरह से विस्तार योग्य अनुप्रयोगों के लिए इसकी शक्ति और क्षमता से बहुत दूर उड़ा हूं। – user120985
बहुत बहुत धन्यवाद ... मेरी समस्या हल हो गई –