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 ?

WPF+PRISM+MEF initializing DownloadedPartCatalogCollection

您的模块类必须实现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

相关文章:
  • 没有找到相关文章