0

我正在将 Prism 与 MEF 扩展一起使用,并且在有关导入到接口的项目设置方面遇到了一些问题。问题是接口与具体实现不在同一个程序集中(因为其他项目中还有其他具体实现也使用相同的接口)。

所以因为我只有一个对带有接口的项目的引用,而具体的实现从来没有在我的主应用程序中直接引用,所以它永远不会包含在 bin 目录中。因此,在运行时 MEF 组合失败,因为它试图注入一个没有包含实现的程序集的类。

这样做的正确方法是什么?我总是可以将它复制到 bin 目录,但这很糟糕......或者我可以将它复制到插件目录,但这也很糟糕,因为其他具体实现必须存在于同一个插件目录中。

要么我完全错过了一些东西,要么这不是 MEF 的好用处,或者......?

4

1 回答 1

1

MEF 实现模块通常不被主项目引用——MEF 的重点是能够在运行时加载不同的东西。

我在 VS 的主项目中创建了一个构建后操作,以将 MEF 模块复制到主项目期望在其中找到 MEF 模块的任何位置——bin 或 bin 的子目录。

您可以改为更改每个 MEF 模块项目中的构建输出目录,以将模块二进制文件输出到主项目 bin 目录或 bin 的子目录。

我不熟悉 Prism,但是对于带有 .NET 4.0 的普通旧 MEF,我构建了 MEF 模块文件路径的 MEF 目录,通常来自主项目配置文件中的信息。(加载在一个目录中找到的所有 dll 是自找麻烦)

即使主项目没有引用 MEF 模块,您仍然可以在构建主项目时让 VS 构建 MEF 模块,方法是将 MEF 模块添加到主项目的项目依赖项中。确保所有 MEF 模块项目都包含在与主项目相同的解决方案中。右键单击解决方案资源管理器中的主项目,选择项目依赖项,然后在所有 MEF 模块旁边打勾。这也将导致在 MEF 模块更改时重新编译主项目,这不是绝对必要的,但如果您在某处更改接口,这仍然是一个好主意。

于 2012-11-09T17:51:10.267 回答