2012-07-25 73 views
0

我正在使用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個模塊會突然開始引發重構?特別是當模塊甚至沒有定義任何出口或進口時?這導致我們如何阻止它解決這個問題?

回答

0

這個問題證明是複製本地設置爲真的程序集的引用。

確保在主應用程序部件中設置的所有引用都設置爲Copy Local = false似乎可以解決問題。