2013-07-28 42 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

我會這樣做謝謝:) –