我不斷收到下面的錯誤,一直無法弄清楚。我想知道是否有人可以協助。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正確。和想法?
謝謝!
引導程序繼承自UnityBootstraper。我手動查找IModule,因爲我有一個要求在加載屏幕上報告加載的模塊。整個控制方面是因爲我需要將模塊加載到Avalon Dock(DockableContent)中,並且我可以看到的唯一方法是如果我將這些模塊封裝並用DockableContent base手動加載它們。最後,我可能需要做更多的研究,但只是試圖學習,讓事情繼續下去。我會採取任何建議到你認爲我錯了的地方。 – Dave 2012-04-16 18:21:17
此外,如果您指的是錯誤以確定「MEF類型」,則表示「如果使用MEF時發生此錯誤」,而不是「如果」。我遠離棱鏡/統一/ MEF大師,也許你可以告訴我,你看到的是什麼類型的MEF? – Dave 2012-04-16 18:31:35
ModuleCatalog是一個MEF類型,這就是爲什麼我很困惑。任何你在MEF上使用Unity的理由? – 2012-04-16 18:47:10