【问题标题】:Instantiating a new type with MEF使用 MEF 实例化新类型
【发布时间】:2013-12-19 17:31:45
【问题描述】:

我正在使用来自Glen BlockCompositionInitializer.SatisfyImports(this) 和一个使用 Prism 4.1 和 Prism 的 MEFExtensions 的 WPF 应用程序。

我以前用过很多次都没有问题,但每隔一段时间我打电话给SatisfyImports(this)就会得到以下错误:

类型的第一次机会异常 'System.Resources.MissingManifestResourceException' 发生在 mscorlib.dll 附加信息:找不到适合指定文化或中性文化的任何资源。确保 “System.ComponentModel.Composition.Initialization.Strings.resources” 已正确嵌入或链接到程序集中 “Microsoft.ComponentModel.Composition.Initialization.Desktop”在 编译时间,或者所需的所有附属程序集 可加载并完全签名。 如果有这个异常的处理程序,程序可以安全地继续。

有人知道我为什么会收到这个错误以及如何解决它吗?

【问题讨论】:

标签: wpf mef prism-4


【解决方案1】:

CompositionInitializer 方法在某些情况下不适用于 WPF,正如上面的 MissingManifestResourceException 所证明的那样 - 基本上,我认为这是说由于导入的 DLL 的某些资源问题导致其中一个导入失败......你可能有也可能没有任何控制权。

更好的方法(我认为)是使用 MEF ExportFactory 为 WPF 应用程序实例化对象,而不是使用 CompositionInitializer:

[Export]
public class OrderController {

  [Import] 
  public ExportFactory<OrderViewModel> OrderVMFactory {get;set;}

  public OrderViewModel CreateOrder() {
    return OrderVMFactory.CreateExport().Value;
  }
}

无论如何都为我工作。

我确实有一些关于内存管理和导出工厂的问题,但那是另一篇文章 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多