我正在使用MEF编写WPF应用程序以实现可扩展性。核心应用程序导入来自程序集的类型,核心应用程序对使用MEF DirectoryCatalog一无所知。包含导入类型的程序集位于另一个目录中,并且嵌入了一个我通常可以使用
访问的XAML资源组件 Application.LoadComponent( new Uri( "MyAssembly;component/MyXaml.xaml" ) );
然而,当程序集被链接时,执行此操作会获得IOException Cannot locate resource 'myxaml.xaml'
(看起来很奇怪,不抱怨无法找到程序集)
有人有什么想法吗?
答案 0 :(得分:0)
您可能过度复杂地使用MEF和外部导入。通常情况下,你的应用程序中有正常的项目依赖关系或外部依赖关系,而且从我在帖子中看到的内容来看,到目前为止这对你来说还是很好。
当您将MEF添加到等式中时,您的问题就出现了。这可能是因为您引导MEF并导入这些DLL的方式,并且我无法通过查看您的代码找到它。
我可以告诉你我是如何做到这一点的,以及我开发的应用程序:
我正常设置所有内容,具有我需要的每个项目的正常项目依赖性,然后当我从主WPF应用程序项目引导MEF时,它引用了几乎所有内容(在我的特定情况下,它是来自我的MefBootstrapper)棱镜)我简单地做的是:
public class SigepBootstrapper : MefBootstrapper
{
protected override void ConfigureAggregateCatalog()
{
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(SigepBootstrapper).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(AutoPopulateExportedViewsBehavior).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(StatusBarView).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Traversals).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(EngineManager).Assembly));
}
...
如果我没有使用Prism,我会创建AssemblyCatalog,只会以不同方式设置它们,所以沿着其他一些引导程序,我会继续写下:
new AssemblyCatalog(typeof(SigepBootstrapper).Assembly)