我正在使用来自Glen Block的CompositionInitializer.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 编译时间,或所需的所有附属程序集 可加载和完全签名。 如果存在此异常的处理程序,则可以安全地继续该程序。
任何人都知道我为什么会收到此错误以及如何解决此问题?
答案 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;
}
}
无论如何都为我工作。
我对内存管理和出口工厂有一些疑问,但这是另一篇文章:)