使用带MEF的Type导出和导入委托

时间:2012-12-06 23:41:53

标签: c# delegates mef

我们目前正在使用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; }

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

希望这有帮助,尊重