WPF+PRISM+MEF initializing DownloadedPartCatalogCollection
本文关键字:DownloadedPartCatalogCollection initializing WPF+PRISM+MEF | 更新日期: 2023-09-27 18:19:03
我正在尝试从我的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 ' nError是:无法定位具有类型的模块"OrderDetailsModule。OrderDetailsModule OrderDetailsModule,版本=1.0.0.0,文化=中性,PublicKeyToken=null'导出模块。确保模块目录中的模块名称匹配ModuleExportAttribute中指定的模块类型。"
深入Prism,在MefModuleInitializer中,有一个if (this.downloadedPartCatalogs.TryGet(moduleInfo, out partCatalog))
,下载的部分是空的。我可以看到在MefModuleInitializer类中,downloaddpartcatalogs是通过ImportingConstructor属性注入的。
这是我的OrderDetailsModule类
[Export("OrderDetailsModule")]
public class OrderDetailsModule
{
}
问题是,我在哪里导出下载的partcatalogs ?
您的模块类必须实现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));
. . .
}
请阅读Prism文档:https://github.com/PrismLibrary/Prism/blob/master/Documentation/WPF/30-ModularApplicationDevelopment.md#modules-in-mef