【问题标题】:Export and Import Delegate using Type with MEF使用带有 MEF 的类型导出和导入委托
【发布时间】:2012-12-31 09:45:31
【问题描述】:

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

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

【问题讨论】:

    标签: c# delegates mef


    【解决方案1】:

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

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

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

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

    希望对你有帮助,问候

    【讨论】:

    • 我同意你的看法。另一种方法是使用 Generate 方法制作类 ThingGenerator 工厂类。
    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 2011-05-19
    • 1970-01-01
    • 2011-03-02
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多