繁体   English   中英

MEF和导入到接口?

[英]MEF and Import to interfaces?

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

因此,由于我仅通过接口对项目进行引用,并且具体实现从未在我的主应用程序中直接引用,因此它永远不会包含在bin目录中。 因此在运行时,MEF合成失败,因为它试图注入一个没有包含实现的程序集的类。

什么是正确的方法? 我总是可以将其复制到bin目录中,但是很烂...或者我可以将其复制到插件目录中,但是也很烂,因为其他具体的实现方式必须位于该相同的插件目录中。

我完全丢失了什么,或者这不是MEF的好用法,还是...?

主项目通常不引用MEF实现模块-MEF的全部重点是能够在运行时加载不同的内容。

我在VS的主项目中创建一个构建后操作,以将MEF模块复制到主项目希望在bin或bin的子目录中找到MEF模块的任何内容。

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

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

即使主项目没有引用MEF模块,通过将MEF模块添加到主项目的项目依赖关系中,您仍然可以在构建主项目时让VS来构建MEF模块。 确保所有MEF模块项目都包含在与主项目相同的解决方案中。 在解决方案资源管理器中的主项目上单击鼠标右键,选择“项目依赖项”,然后在所有MEF模块旁边放置一个复选标记。 当MEF模块更改时,这也将导致重新编译主项目,这不是严格必需的,但如果您在某处更改了接口,则还是个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM