应用程序.LoadComponent从MEF链接的组件中加载组件

本文关键字:组件 加载 链接 LoadComponent MEF 应用程序 | 更新日期: 2023-09-27 17:50:41

我正在编写一个使用MEF进行可扩展性的WPF应用程序。核心应用程序使用MEF DirectoryCatalog从核心应用程序一无所知的程序集中导入类型。包含导入类型的程序集位于另一个目录中,并嵌入了一个XAML资源组件,我通常可以使用

访问该组件。

Application.LoadComponent( new Uri( "MyAssembly;component/MyXaml.xaml" ) );

然而,作为程序集链接在,这样做得到IOException Cannot locate resource 'myxaml.xaml'(似乎很奇怪,不抱怨无法找到程序集)

有人有什么想法吗?

应用程序.LoadComponent从MEF链接的组件中加载组件

您可能使MEF和外部导入的使用过于复杂。通常情况下,你的应用程序中有正常的项目依赖项或外部依赖项,从我在你的帖子中读到的,到目前为止,这对你来说工作得很好。

当您将MEF添加到等式中时,问题就出现了。这可能是因为您引导MEF和导入这些dll的方式,而我无法通过查看您的代码来发现。

我可以告诉你我是如何在我开发的应用程序上成功地做到这一点的:

我正常设置一切,我需要每个项目的正常项目依赖关系,然后当我引导MEF时,从主要的WPF应用程序项目,它引用了几乎所有的东西(在我的具体情况下,它是来自Prism的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)