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.
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 –
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
Çok teşekkürler ... sorunumu çözdüm –