C# 类型目录的使用

C# 类型目录的使用,c#,.net,mef,C#,.net,Mef,我原以为这很容易,但在浏览了很多页面之后,谷歌并没有帮我 我有以下一个测试方法 var tCatalog = new TypeCatalog(typeof (ISystemIndex)); var aCatalog = new AssemblyCatalog(typeof (ISystemIndex).Assembly); tCatalog.Parts为空,而aCatalog.Parts.Count为3(其中一个来自用[Export(typeof(ISystemIndex))]修饰的类),另外

我原以为这很容易,但在浏览了很多页面之后,谷歌并没有帮我

我有以下一个测试方法

var tCatalog = new TypeCatalog(typeof (ISystemIndex));
var aCatalog = new AssemblyCatalog(typeof (ISystemIndex).Assembly);
tCatalog.Parts
为空,而
aCatalog.Parts.Count
为3(其中一个来自用
[Export(typeof(ISystemIndex))]修饰的类)
,另外两个来自继承自基本w/导出定义的类)

我做错了什么?我是否需要以某种方式初始化
TypeCatalog

我试图解决的问题是在程序集中创建一个包含可导出类子集的目录


提前感谢。

您正在尝试为接口定义创建一个
TypeCatalog
,它没有导出,因为没有
[Export]
属性装饰
ISystemIndex
接口

如果你上过这样的课

[Export(typeof(ISystemIndex))]
public class MySystemIndex : ISystemIndex
{
}
您将创建一个类型目录

var tCatalog = new TypeCatalog(typeof(MySystemIndex));
那么您将在
tCatalog.Parts
中看到它

编辑


如果您希望按特定条件筛选目录(例如,在您的情况下,仅导出),请查阅MEF的文档,了解您正在尝试为接口定义创建一个
TypeCatalog
,该目录未导出,因为没有
[Export]
属性装饰
ISystemIndex
接口

如果你上过这样的课

[Export(typeof(ISystemIndex))]
public class MySystemIndex : ISystemIndex
{
}
您将创建一个类型目录

var tCatalog = new TypeCatalog(typeof(MySystemIndex));
那么您将在
tCatalog.Parts
中看到它

编辑


如果您想让目录按特定标准进行筛选(例如,在您的情况下,仅导出),请查看MEF的文档,了解如果他直接在
typeof(MySystemIndex)
上而不是在
typeof(ISystemIndex)
上构建
TypeCatalog
,而不是在
typeof(ISystemIndex)
上构建
TypeCatalog
属性有什么意义传递到
TypeCatalog
仅告诉目录应该反映哪些类型以查找导出。如果没有导出属性,目录将不包含任何部分。
export
属性的意义是什么?如果他直接在
typeof(MySystemIndex)
上构建
TypeCatalog
,而不是在
typeof(ISystemIndex)
上构建
TypeCatalog
传递到
TypeCatalog
仅告诉目录应该反映哪些类型以查找导出。如果没有“导出”属性,目录将不包含任何零件。