簡體   English   中英

WPF + PRISM + MEF初始化DownloadedPartCatalogCollection

[英]WPF+PRISM+MEF initializing DownloadedPartCatalogCollection

我正在嘗試從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中,有一個if (this.downloadedPartCatalogs.TryGet(moduleInfo, out partCatalog)) ,並且下載的部件為空。 我可以在MefModuleInitializer類中看到,downloadedPartCatalogs是通過ImportingConstructor屬性注入的。

這是我的OrderDetailsModule類

[Export("OrderDetailsModule")]
public class OrderDetailsModule
{
}

問題是,我在哪里導出downloadedPartCatalog?

您的模塊類必須實現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));
    . . .
}

請閱讀棱鏡文檔: https : //github.com/PrismLibrary/Prism/blob/master/Documentation/WPF/30-ModularApplicationDevelopment.md#modules-in-mef

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM