我正在使用Silverlight 4應用程序,我們使用Prism/MEF構建模塊。模塊化Silverlight應用程序的重構問題
每個模塊都是作爲Silverlight應用程序創建的。然後我們使用ModulesCatalog.xaml文件來控制模塊的加載方式。
我們有6個模塊,一切都很完美。
本週我們添加了第7個模塊,我們只創建了新的Silverlight應用程序。我們如下設置模塊類。
[ModuleExport(typeof(InsightModule))]
public class InsightModule : IModule
{
}
然後我們添加了一個條目到我們的ModulesCatalog文件。
現在,當我們運行應用程序時,我們開始獲取所有類型的重構錯誤。堆棧顯示了這一點。
at System.ComponentModel.Composition.CompositionResult.ThrowOnErrors(AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.ExportProvider.OnExportsChanging(ExportsChangeEventArgs e)
at System.ComponentModel.Composition.Hosting.CatalogExportProvider.OnCatalogChanging(Object sender, ComposablePartCatalogChangeEventArgs e)
at System.ComponentModel.Composition.Hosting.ComposablePartCatalogCollection.OnChanging(Object sender, ComposablePartCatalogChangeEventArgs e)
at System.ComponentModel.Composition.Hosting.AggregateCatalog.OnChanging(ComposablePartCatalogChangeEventArgs e)
at System.ComponentModel.Composition.Hosting.ComposablePartCatalogCollection.RaiseChangingEvent(Lazy`1 addedDefinitions, Lazy`1 removedDefinitions, AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.ComposablePartCatalogCollection.Add(ComposablePartCatalog item)
at Microsoft.Practices.Prism.MefExtensions.Modularity.MefModuleInitializer.CreateModule(ModuleInfo moduleInfo)
at Microsoft.Practices.Prism.Modularity.ModuleInitializer.Initialize(ModuleInfo moduleInfo)
然後你得到標準輸出。
異常消息是:構圖保持不變。由於以下錯誤,這些更改被拒絕:組合產生了多個組合錯誤,其中有57個根本原因。根源在下面提供。查看CompositionException.Errors屬性以獲取更多詳細信息。
1)在部件'EyeCue.Common.AboutEyeCueView'上由不可重新導入的'EyeCue.Common.AboutEyeCueView.ViewModel(ContractName =「EyeCue.Common.AboutEyeCueVM」)'阻止的出口變化。
什麼是令人不解的是,爲什麼沒有其他的6個模塊造成的這個問題,但現在突然,沒有任何東西了怎麼回事這個新的模塊是造成目錄的重新組合。這個不成立。
另外我有ctor的導入在某些情況下,這就是他們我必須做的事情來工作,所以這不像設置允許重組屬性attribut。
我已經下載了VisualMFX,但是這行代碼會拋出一個Object Not initialized異常。
this.compositionInfo = new CompositionInfo(_aggregateCatalog, _container);
兩個_aggregateCatalog
& _container
不是空當這種情況發生。
總之,爲什麼第7個模塊會突然開始引發重構?特別是當模塊甚至沒有定義任何出口或進口時?這導致我們如何阻止它解決這個問題?