我正在尝试从我的MefBootStrapper实现初始化模块
Type type = typeof(OrderDetailsModule.OrderDetailsModule);
ModuleInfo mi = new ModuleInfo {
ModuleName = type.Name,
Ref = new Uri(type.Assembly.Location, UriKind.RelativeOrAbsolute).AbsoluteUri,
InitializationMode =InitializationMode.WhenAvailable,
ModuleType = type.AssemblyQualifiedName
};
this.ModuleCatalog.AddModule(mi);
我收到错误
无法加载模块OrderDetailsModule的类型。 \ r \ n错误是: 无法找到具有类型的模块 ' OrderDetailsModule.OrderDetailsModule,OrderDetailsModule, Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'之间 导出的模块。确保模块目录中的模块名称 在ModuleExportAttribute上为模块类型指定的匹配项。"
在MefModuleInitializer中挖掘Prism,有if (this.downloadedPartCatalogs.TryGet(moduleInfo, out partCatalog))
,下载的部分为空。我可以在MefModuleInitializer类中看到,insertedCartCatalogs是通过ImportingConstructor属性注入的。
这是我的OrderDetailsModule类
[Export("OrderDetailsModule")]
public class OrderDetailsModule
{
}
问题是,我在哪里导出已下载的PartCatalogs?
答案 0 :(得分:1)
您的模块类必须实现IModule
接口并归属于ModuleExportAttribute。
[ModuleExport(typeof(ModuleD))]
public class ModuleD : IModule
{...}
或使用AssemblyCatalog自动发现和加载模块。
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(ModuleA).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(ModuleC).Assembly));
. . .
}