使用MEF实例化新类型

时间:2013-12-19 17:31:45

标签: wpf mef prism-4

我正在使用来自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”at   编译时间,或所需的所有附属程序集   可加载和完全签名。        如果存在此异常的处理程序,则可以安全地继续该程序。

任何人都知道我为什么会收到此错误以及如何解决此问题?

1 个答案:

答案 0 :(得分:0)

在某些情况下,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;
  }
}

无论如何都为我工作。

我对内存管理和出口工厂有一些疑问,但这是另一篇文章:)