2013-07-28 40 views
1

我正在尝试使用WPF & Unity开发PRISM应用程序。现在我到了我必须在我的ShellView中加载我的模块的部分。我尝试通过使用Type.GetType方法来完成此操作,但调试后它说null。现在我似乎无法弄清楚什么是错的。我唯一知道的是,我的ModuleType可能不是一个Assembly Qualified名称。有人可以帮我吗 ?Type.GetType返回null

public partial class Shell : Window 
{ 
    private IModuleManager ModuleManager; 
    private IUnityContainer Container; 
    private IModuleCatalog ModuleCatalog; 

    public Shell(IModuleManager moduleManager, IUnityContainer container, IModuleCatalog moduleCatalog) 
    { 
     this.ModuleCatalog = moduleCatalog; 

     if (moduleManager == null) throw new ArgumentException("Modulemanager is null"); 

     ModuleManager = moduleManager; 
     ModuleManager.Run(); 


     Container = container; 

     foreach (var module in ModuleCatalog.Modules) 
     { 
      OpenMainView(module); 
     } 

     InitializeComponent(); 
    } 

    private void OpenMainView(ModuleInfo module) 
    { 
     Type ModuleType = Type.GetType(module.ModuleType); //this returns null 
    } 
+0

是否'ModuleType'实例化? –

+0

是的,它被实例化 –

+0

@NicolasPierre我看到你找到了正确的答案,因此我删除了我的(因为指的是一个通用的问题,而不是这个具体的问题)。无论如何,我明白你使用了.GetType()。如果您的原始代码错误,您应该为未来的观众更新它;如果这是对的,我很想知道它(会帮助我获得对Prism的良好初步掌握)。 – varocarbas

回答

1

这可能是一个延伸,但你使用ModuleExportAttibute标有IModuleExport Interface你的模块?

[ModuleExport("TestModule", typeof(TestModule), InitializationMode = InitializationMode.OnDemand)] 
public class MainMenuControlModule : IModule 

编辑:的最后一个问题是不是该代码没有被告知从磁盘加载的模块。

+0

我在使用DirectoryModulecatalog,所以需要导出标签吗? –

+1

这是一个很好的问题。我在PRISM源代码内部找到了一个峰值,并且它看起来不像DirectoryModuleCatalog需要模块导出。在我使用的代码库中,我手动加载了我需要的模块,很遗憾,我没有使用此处使用的方法。但是,您是否查看了DirectoryModuleCatalogFixture测试类中的ShouldReturnAListOfModuleInfo示例方法?这可能会让你知道你的表现与官方PRISM测试代码不同。 –

+0

我会这样做谢谢:) –