0

我们目前正在使用 MEF 按名称导入和导出代表。

public delegate IThing ThingGenerator();

[Export("ThingGenerator")]
public IThing MyThingGenerator() { ... }

[ImportMany("ThingGenerator")]
public IEnumerable<ThingGenerator> ThingGenerators { get; set; }

为了可维护性,我们希望使用类型进行导入和导出。但是,我们似乎无法完成这项工作。

[Export(typeof(ThingGenerator))]
public IThing MyThingGenerator() { ... }

[ImportMany(typeof(ThingGenerator))]
public IEnumerable<ThingGenerator> ThingGenerators { get; set; }

在某些形式中,我们会收到错误消息,指出导出的函数与委托类型不匹配。在其他情况下,类型似乎没有被导出。有没有人成功做到这一点?

4

1 回答 1

3

您实际上可以按类型导入和导出,仅在您的情况下,您应该尝试导出和导入 typeof(IThing) 而不是 typeof(ThingGenerator)。

通常导出的部分会实现一些接口(可以是一个空接口,就像一个标签),所以你可以识别你正在导入的内容,但它也适用于类型。

这是一个很好的视频教程,可以帮助您开始使用 MEF(它在 SilverLight 中,但也适用于 WPF,也应该适用于 Winforms) 第 1 部分第 2 部分

检查第 2 部分,当他使用元数据创建自定义导出属性时,它可能特别有用。

希望这会有所帮助,问候

于 2012-12-31T01:45:31.370 回答