在使用MEF时,我遗漏了一些基本的东西.我使用样本和一个简单的控制台应用程序工作,其中所有内容都在同一个程序集中.然后我将一些导入和导出放在一个包含各种实体的单独项目中.我想在MS测试中使用这些实体,但实际上从未完成组合.当我将组合物移动到有问题的实体的构造函数中时,它可以工作,但这显然是错误的.GetExecutingAssembly只是"看到"测试过程吗?我错过了什么容器?我试着把容器放在测试中使用,没有运气.MEF文档仍然很少,我找不到使用来自不同项目的实体的应用程序(或MS Test)的简单示例......
在.NET中,每个exe或DLL文件称为程序集1.因此,当您基于"正在执行的程序集"构建目录并在应用程序入口点使用它时,您只需包含在exe项目中定义的部分.您没有在DLL中定义任何部分.
尝试替换这个:
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
Run Code Online (Sandbox Code Playgroud)
这样:
var catalog = new AggregateCatalog(
new ComposablePartCatalog[]
{
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(".")
});
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚发现有一个更简单的解决方案:
var catalog = new DirectoryCatalog(".", "*");
Run Code Online (Sandbox Code Playgroud)
(1)实际上,程序集可以包含多个文件,但很少使用.该术语也用于并排COM.