2009-12-28 18 views
7

Aynı Arabirim türünde birden fazla MEF parçası yükleyen bir Winforms masaüstü uygulamasına sahibim.Birden fazla MEF parçası yüklenemiyor

Sorun:

kompozisyon değişmemiştir: Ben şu istisna olsun aynı tipte birden fazla yüklemeye çalıştığınızda. Değişiklikler aşağıdaki hata (lar) nedeniyle reddedilmiştir: Kompozisyon, tek bir kompozisyon hatası üretmiştir. Kök neden aşağıda verilmiştir. Daha ayrıntılı bilgi için CompositionException.Errors özelliğini gözden geçirin.

1) Geçerli bir ihracat '((exportDefinition.ContractName = "BOCA.TaskPilot.Common.Extensions.IFolderViewExtension") & & (exportDefinition.Metadata.ContainsKey ("ExportTypeIdentity") & & "kısıtlamayı eşleşen bulundu BOCA.TaskPilot.Common.Extensions.IFolderViewExtension ".Equals (exportDefinition.Metadata.get_Item (" ExportTypeIdentity ")))) 'geçersiz ihracat reddedilmiş olabilir. Sonuçlanan

: import 'TaskPilot.Windows.MainForm.FolderViewExtension (ContractName = "BOCA.TaskPilot.Common.Extensions.IFolderViewExtension")' kısmında 'TaskPilot.Windows.MainForm' ayarlanamaz. Element: -:

  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") İşte> TaskPilot.Windows.MainForm

parçaları yüklemek için koddur

İşte MEF parçaların her biri için sınıfta kod:

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

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

İşte İthalat Ana form üzerinde kullanılan bulunuyor

Son Catalog.Catalogs.Add satırından rahatsızlık duyarsam istisnayı atar. Eğer onsuz koşarsam, iyi çalışır. Bu çizgi, IFolderItemsViewExtension Arabirimini uygulayan farklı bir kullanıcı denetimi yükler. Tüm sahip olduğu kullanıcı denetimi ve bu arabirim olan ve yine de aynı özel durumu aldığım sahte bir proje yüklemeye çalıştım. Ne yaptığımın bir önemi yok, hala bu istisnayı alıyorum.

Aynı tür MEF parça dışa aktarma işlemlerinden daha fazlasını yüklemediğim sürece her şey yolunda gidiyor gibi görünüyor.

Bu, MEF indirmesinden System.ComponentModel.Composistion 2009.22.10.0'ın en son sürümünü kullanıyor.

cevap

4

Bu hata, IFolderViewExtension türünde bir dışa aktarma bulunamadığını gösterir. Bunun, göstermiş olduğunuz IFolderItemsViewExtension öğesinden farklı olduğunu unutmayın.

Benim düşüncem sorun, birden çok IFolderItemsViewExtensions sahip olduğunuzdan değil, birden çok IFolderViewExtensions sahip olduğunuzdan veya başka bir sözleşmenin birden fazla içeriğe sahip olduğunuzdan birden fazla içeriğe sahip olduğunuzdan başka bir sözleşme var.

Bu, aynı dizine, dizin kataloglarınızdan birden fazlasında sahip olduğunuzdan kaynaklanabilir. Bir derleme referansınız varsa ve yerel kopya doğru olarak ayarlanmışsa, bunun gerçekleşmesi kolaydır.

+1

Daniel muhtemelen burada dikkat çekiyor; MEF sorunlarını hata ayıklamadan daha fazla hata ayıklamanın olduğunu unutmayın. Muhtemelen burada açıklandığı gibi kompozisyon durumunu dökmeniz gerekir. Http://mef.codeplex.com/wikipage?title=Debugging%20and%20Diagnostics&referringTitle=Guide –

+0

Yardımlarınız için teşekkürler. İthalatları kendileri olan kontrollerden çıkarmaya ve her şeyin işe yaramaya başladım. İthalatları geri koydum ve şimdi asıl problemi başlayamıyorum. Alt çizgi olsa da ... şimdi çalışıyor. Teşekkürler Daniel ve Nicholas. Şimdi ayaklarımı haftada MEF'e alıyorum ve masaüstünde tamamen genişletilebilir uygulamalar için gücü ve potansiyeli nedeniyle çok etkilendim. – user120985

+0

Çok teşekkürler ... sorunumu çözdüm –

0

İhracat sınıfınızda birden fazla dışa aktarma ifadesi olabilir. Aynı konuyla karşı karşıya kaldım ve bu, diğer tüm uzman beyanlarını bu ihracat sınıfından kaldırdığımda çözüldü. ve şimdi iyi çalışıyor.