2011-06-21 94 views
1

我使用MEF,MVVM和Silverlight4以下是我的代碼問題與MEF MVVM Silverlight的進口4

Main.cs:

using System; 
using System.ComponentModel; 
using System.ComponentModel.Composition; 
using System.ComponentModel.Composition.Diagnostics; 
using System.ServiceModel.DomainServices.Client.ApplicationServices; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Navigation; 
public partial class Main : UserControl 
    { 
     public Main() 
     { 
      InitializeComponent(); 
      // Satisfy the MEF imports for the class. 
      if (!DesignerProperties.IsInDesignTool) 
      { 
       CompositionInitializer.SatisfyImports(this); 
      } 

     } 


     /// <summary> 
     /// Sets the datacontext to the viewmodel for this view 
     /// </summary> 
     [Import(ViewModelTypes.MainViewModel)] 
     public object ViewModel 
     { 
      set 
      { 
       this.DataContext = value; 
      } 
     } 
    } 

視圖模型:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.Composition; 
using System.Windows.Input; 
    [Export(ViewModelTypes.MainViewModel)] 
    [PartCreationPolicy(CreationPolicy.NonShared)] 
    public class MainViewModel : ViewModelBase 
    { 
     [ImportingConstructor] 
     public MainViewModel(IAuthenticationModel authModel, IprospectManagementModel managementModel) 
     { 
      this.authenticationModel = authModel; 
      this.managementModel = managementModel; 
     } 

     /// <summary> 
     /// The authentication model. 
     /// </summary> 
     private IAuthenticationModel authenticationModel; 

     /// <summary> 
     /// The Iprospect management model. 
     /// </summary> 
     private IprospectManagementModel managementModel; 

    } 

下面是我得到的錯誤,請幫助我追蹤一樣。

構圖保持不變。由於以下錯誤,這些更改被拒絕:組合錯誤。根源在下面提供。查看CompositionException.Errors屬性以獲取更多詳細信息。

1)未找到與約束'(exportDefinition.ContractName ==「MainViewModel」)'匹配的有效導出,無效導出可能已被拒絕。

結果造成:

Cannot set import 'IProspectCommonApp.Client.Main.ViewModel (ContractName="MainViewModel")' on part 'IProspectCommonApp.Client.Main'. 
Element: IProspectCommonApp.Client.Main.ViewModel (ContractName="MainViewModel") --> IProspectCommonApp.Client.Main 

回答

2

這可能是失敗的,因爲沒有IAuthenticationModel和/或IprospectManagementModel出口。 MainViewModel通過ImportingConstructor導入它們,因此如果它們尚未導出,則無法創建。請參閱How to Debug and Diagnose MEF Failures

+0

感謝您的鏈接,我一直在努力的一個主題是如何調試MEF應用程序 – Darren