从MEF-part中引用ExportMetaData?

时间:2016-07-03 15:56:42

标签: c# mef

这可能是一个非常简单的问题,但由于谷歌很难给你答案,你可能会!

我想知道MEF中的某个部分是否可以获取其自己的ExportMetadata中定义的值?

让我们说我得到了这个代码:

[ExportMetadata("name", "A Template Plugin")]
[ExportMetadata("guid", "0db79a169xy741229a1b558a07867d60")]
[ExportMetadata("description", "A template for a new plugin")]
[ExportMetadata("version", "1.0.0.43")]
[Export(typeof(IPlugin)), PartCreationPolicy(CreationPolicy.NonShared)]

public class PluginExport : IPlugin, IDisposable
    {
  ... code goes here...
... can I get hold of metadata, ie the "guid" key ??? ...
}

如果有人质疑它的真实性,那么我为3pp开发人员制作一个插件模板和一些值(上面的例子中没有显示)也需要在插件中使用,我认为没有它们会很好在两个不同的地方设置了大量数据。

1 个答案:

答案 0 :(得分:2)

您可以使用反射而不管 MEF 来获取属性值:

[ExportMetadata("guid", "0db79a169xy741229a1b558a07867d60")]
class PluginExport
{
    void PrintGuid()
    {
        var guid = this.GetType()
                       .GetCustomAttributes(false)
                       .OfType<ExportMetadataAttribute>()
                       .Single(attribute => attribute.Name == "guid").Value;

        Console.WriteLine(guid); // Prints your value.
    }
}
相关问题