2016-03-13 96 views
0

我正在嘗試使用棱鏡和mef來配置wpf項目。 我有一個問題,我不知道如何解決它。未註釋的代碼不執行,但註釋的代碼有效。 你有任何ideea?棱鏡和MEF項目設置

/// <summary> 
/// Interaction logic for Shell.xaml 
/// </summary> 
[Export] 
public partial class Shell : Window, IPartImportsSatisfiedNotification 
{ 
    private const string ModuleName = "FirstRegion"; 
    private static Uri ViewUri = new Uri("/UserControl1", UriKind.Relative); 

    public Shell() 
    { 
     InitializeComponent(); 
    } 

    [Import(AllowRecomposition = false)] 
    public IModuleManager ModuleManager; 

    [Import(AllowRecomposition = false)] 
    public IRegionManager RegionManager; 

    public void OnImportsSatisfied() 
    { 
     this.ModuleManager.LoadModuleCompleted += 
          (s, e) => 
          { 
          ---------(do not execute)----------- 
           if (e.ModuleInfo.ModuleName == EmailModuleName) 
           { 
            this.RegionManager.RequestNavigate(
             "MainContentRegion", 
             ViewUri); 
           } 
          }; 


     //this.RegionManager.RequestNavigate(
     // "MainContentRegion", 
     // ViewUri); 

    } 
} 

回答

0

問題似乎LoadModuleCompleted事件在OnImportSatisfied()調用之前被觸發。

你可以嘗試在構造函數中移動代碼,以確認上述假設

public Shell() 
{ 
    InitializeComponent(); 
    this.ModuleManager.LoadModuleCompleted += 
      (s, e) => 
          { 
          ---------(do not execute)----------- 
           if (e.ModuleInfo.ModuleName == EmailModuleName) 
           { 
            this.RegionManager.RequestNavigate(
             "MainContentRegion", 
             InboxViewUri); 
           } 
          }; 
} 
+0

其他信息:對象引用不設置到對象的實例。 – Adrian