2016-07-03 13 views
0

Dies könnte ein super einfache Frage, aber da Google eine harte Zeit geben mir Antworten hat Sie vielleicht!Referenzierung ExportMetaData aus MEF-Teil?

Ich frage mich, wenn sie möglich, dass ein Teil in MEF hält, Werte in ihrem eigenen ExportMetadata definiert zu bekommen?

Können sagen, ich habe diesen Code für einen Teil:

[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 ??? ... 
} 

Wenn jemand die geistige Gesundheit dieser seine bcause Im machen ein Plugin-Vorlage für 3pp Entwickler und einige Werte (nicht im Beispiel oben) auch Fragen muss aus dem Plugin verwendet werden, und ich denke, es wäre schön, sie nicht Setup eine Menge Daten in zwei getrennten Orten haben.

Antwort

2

Sie Reflexion verwenden können unabhängig von MEF den Attributwert zu erhalten:

[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. 
    } 
}