2016-03-13 95 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