2012-04-16 35 views
2

我不斷收到下面的錯誤,一直無法弄清楚。我想知道是否有人可以協助。PRISM + Unity - 發佈加載動態模塊集

錯誤: 未能加載模塊MyExternalAssembly.MyNamespace.MyModule的類型。

如果在Silverlight應用程序中使用MEF時發生此錯誤,請確保對MefExtensions程序集的引用的CopyLocal屬性在主應用程序/ shell中設置爲true,在所有其他程序集中設置爲false。

錯誤:無法從加載的程序集中檢索模塊類型MyExternalAssembly.MyNamespace.MyModule,MyExternalAssembly.MyNamespace,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null。您可能需要指定一個更完全限定的類型名稱..

代碼:

加載屏幕(加載模塊,存儲各種用途的大會參考)

string[] dynamicLibraries = Directory.GetFiles(pluginDirectory, "*.dll", SearchOption.AllDirectories); 

    // Parse through the DLL's and look for types that implement "IModule". 
    foreach (string file in dynamicLibraries) 
    { 
     // Get the plugin assembly information. 
     Assembly plugin = Assembly.LoadFile(file); 

     // Get all types that are exported for plugins. 
     IEnumerable<Type> modules = plugin.GetTypes() 
      .Where(t => typeof(IModule).IsAssignableFrom(t)); 

     if (modules.Count() > 0) 
     { 
      ApplicationState.Instance.Plugins.Add(plugin, modules); 
     } 
    } 

這裏是ConfigureModuleCatelog方法

protected override void ConfigureModuleCatalog() 
{ 
    base.ConfigureModuleCatalog(); 

    ModuleCatalog catalog = (ModuleCatalog)this.ModuleCatalog; 

    foreach (var assembly in ApplicationState.Instance.Plugins) 
    { 
     foreach (var type in assembly.Value) 
     { 
      this.ModuleCatalog.AddModule(new ModuleInfo 
      { 
       ModuleName = type.FullName, 
       ModuleType = type.AssemblyQualifiedName, 
       Ref = new Uri(assembly.Key.Location, UriKind.RelativeOrAbsolute).AbsoluteUri, 
       InitializationMode = InitializationMode.WhenAvailable 
      }); 
     } 
    } 
} 

基本上,我需要一種方法來維護/使用這個「插件」字典,並得到Modularizat離子wprk正確。和想法?

謝謝!

回答

1

我很困惑。你說Unity,但是你的代碼使用MEF類型。如果你使用MEF,爲什麼在地球上你手動找到IModule實現 - 你應該使用MEF爲你做動態分辨率。

+0

引導程序繼承自UnityBootstraper。我手動查找IModule,因爲我有一個要求在加載屏幕上報告加載的模塊。整個控制方面是因爲我需要將模塊加載到Avalon Dock(DockableContent)中,並且我可以看到的唯一方法是如果我將這些模塊封裝並用DockableContent base手動加載它們。最後,我可能需要做更多的研究,但只是試圖學習,讓事情繼續下去。我會採取任何建議到你認爲我錯了的地方。 – Dave 2012-04-16 18:21:17

+0

此外,如果您指的是錯誤以確定「MEF類型」,則表示「如果使用MEF時發生此錯誤」,而不是「如果」。我遠離棱鏡/統一/ MEF大師,也許你可以告訴我,你看到的是什麼類型的MEF? – Dave 2012-04-16 18:31:35

+0

ModuleCatalog是一個MEF類型,這就是爲什麼我很困惑。任何你在MEF上使用Unity的理由? – 2012-04-16 18:47:10